【发布时间】:2014-07-16 19:22:24
【问题描述】:
我有一个 CSV 文件,并且只想删除所有引号,除非在字符串中。
例子:
"I have a file that says "need help" please"
我想删除文本中的所有双引号,除非在双引号内。例如,不要删除“需要帮助”周围的引号
有人知道吗?
我越来越擅长awk 和sed 命令,但这个让我难过。
感谢您的帮助!
【问题讨论】:
-
发布几行具有代表性的输入并附上有趣/困难的例子,否则你很可能会得到一个只适用于这一行的解决方案。
-
... 你去 - 发布的前 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