【问题标题】:Remove Quotes awk or sed删除引号 awk 或 sed
【发布时间】:2014-07-16 19:22:24
【问题描述】:

我有一个 CSV 文件,并且只想删除所有引号,除非在字符串中。

例子:

"I have a file that says "need help" please"

我想删除文本中的所有双引号,除非在双引号内。例如,不要删除“需要帮助”周围的引号

有人知道吗?

我越来越擅长awksed 命令,但这个让我难过。

感谢您的帮助!

【问题讨论】:

  • 发布几行具有代表性的输入并附上有趣/困难的例子,否则你很可能会得到一个只适用于这一行的解决方案。
  • ... 你去 - 发布的前 3 个答案甚至不适用于包含超过 1 个字段的 CSV 文件,例如"a "b" c","d "e" f" -> a "b" c,d "e" f,别介意进入包含换行符、逗号等的字段。我们需要您输入的一个特殊情况是 "a","b" - 是用逗号分隔的 2 个字段或用引号括起来的一个字段在里面?如果是后者,我们怎么知道, 何时分隔字段?如果是前者,如何在字段中显示双引号逗号? CSV 没有标准,因此我们需要您告诉我们 CSV 对您意味着什么。
  • 我能否也提供一个显示文件各种特性的实际数据示例?例如,"I have a file that says "need help", please" 应该附加什么请注意 , 不幸地放在 " 之后...
  • 您发布的内容在引号内没有引号...它有两个单独的引用部分(“我有一个文件说”和“请”),并带有一些未引用的文本(需要帮助)介于两者之间...说真的,除非您将 Unicode 字符用于左双引号和右双引号,否则无法唯一解析任意嵌套的双引号...
  • 大多数 CSV 文件使用的约定是在带引号的字段中,引号必须加倍。因此,您问题中的字段将表示为"I have a file that says ""need help"", please",而取消引用的版本将是I have a file that says "need help", please。这很容易处理。如果您有一个使用其他约定生成的文件,那么答案将完全不同。了解您是否拥有 GNU awk 或其他一些扩展较少的 awk 也会很有用。

标签: string bash awk sed quotes


【解决方案1】:

根据您的 CSV 格式和要求,这可能会也可能不会做您想做的事:

$ cat file
"I have a file that says "need help" please"
"a "b" c","d "e" f"
$
$ awk -F'","' -v OFS=, '{$1=$1;gsub(/^"|"$/,"")}1' file
I have a file that says "need help" please
a "b" c,d "e" f

【讨论】:

    【解决方案2】:

    使用grep -Po '".*?"':

    echo 'this is a test "I need help" and "it has to be now"' | grep -Po '".*?"'
    "I need help"
    "it has to be now"
    

    【讨论】:

    • 当然。您根本没有正确回答 OP 问题。您使用预期的输出(对于这种情况)作为输入;输入' "I have a file that says "need help" please" ' 输出"I have a file that says "" please"(参见twalberg 对OP 的评论)。抱歉,但这对我来说不是一个好建议(啊,另请参阅 Ed Morton 的评论)。
    • @Qeole 感谢您的评论,我理解您的观点,但我不同意这一点,我向 OP 展示了如何将带引号的字段保留在字符串中,并提供了一个比他提供的更好的示例这确实有两个会话,而不是在字符串中引用字段。但无论如何,被否决是你回答不清楚的问题所付出的代价,从现在开始变得更有选择性:)
    • 但这不是 OP 想要的! OP 确实 想要删除一些引号。虽然我同意上面 cmets 强调 OP 使用的 CSV 文件的字段格式尚不清楚,但最初的目的对我来说已经很好地表达了:对于一行上的每个字段,如果存在双引号,则删除它们,除非它们是嵌套引号。当我阅读您的答案时,我看到“嘿,如果您想提取所有引用的部分,这里有一种方法”,我觉得您提出了另一个问题及其相应的答案。
    猜你喜欢
    • 2023-04-01
    • 2020-02-25
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 2011-05-14
    • 2014-03-24
    相关资源
    最近更新 更多