如何使用 Sed 命令来匹配两个模式之间的所有内容?

如何使用 Sed 命令来匹配两个模式之间的所有内容?

这是我正在解析的 CSV 文件中的行 pf 数据的示例。

"Monday, July 3, 2023 at 9:12:34 PM GMT+0:00","Answer 1","Answer 2","Answer 3"

我正在尝试删除“, 2023 at 9:12:34 PM GMT+0:00”部分,所以它看起来像这样:

"Monday, July 3","Answer 1","Answer 2","Answer 3"

CSV 文件中每一行的时间戳数据都将是不同的值,因此我不能简单地对其进行硬编码。

当我尝试此命令时,文件没有任何反应。我不知道为什么,

sed -i 's/, 2023[","]/","/g' example.csv

我感觉我忽略了一些简单的事情。

答案1

[","]匹配一个单身的"与、 或,、 或匹配的字符"

您可能想要匹配顺序不是 的字符",并将其替换为空。所以(总是不-i先测试)

sed -i 's/, 2023[^"]*//' example.csv

不过,您可能需要考虑使用能够理解 CSV 格式的工具 - 例如,磨坊主

mlr --csv -N --quote-all put '$1 = sub($1,", 2023.*", "")'  example.csv

答案2

使用sed

$ sed -i.bak 's/,[^,]*"/"/' input_file
"Monday, July 3","Answer 1","Answer 2","Answer 3"

相关内容