bash - 使用 sed (或类似的)删除重复模式之间的任何内容

标签 bash awk sed non-greedy

我实际上是在尝试“整理”CSV 中的大量数据。我不需要“引号”中的任何信息。

尝试了 sed 's/".*"/""/' 但如果有多个部分在一起,它会删除逗号。

我想从中得到:

1,2,"a",4,"b","c",5

到这里:

1,2,,4,,,5

有 sed 向导可以提供帮助吗? :)

最佳答案

你可以使用

sed 's/"[^"]*"//g' file > newfile

online sed demo :

s='1,2,"a",4,"b","c",5'
sed 's/"[^"]*"//g' <<< "$s"
# => 1,2,,4,,,5

详情

"[^"]*" 模式匹配 ",然后是 " 以外的 0 个或多个字符,然后是 "。由于 RHS 为空,匹配项将被删除。 g 标志使其匹配每一行上的所有匹配项。

关于bash - 使用 sed (或类似的)删除重复模式之间的任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61252844/

相关文章:

bash - (Bash) echo 不输出存储的变量

emacs - 使用 elisp 处理文本

awk - 替换 csv 文件中的 unix 时间戳。换行问题

regex - 使用 awk 打印正则表达式组的长度

shell - 如何合并多行以根据字段分隔符恰好创建两条记录?

bash - 如何突破源 Bash 脚本的功能

linux - 转义 bash 变量以避免特权升级

bash - Kill 在 while 循环中不起作用

bash - Unix:根据匹配的字符串将文件分成两个

ruby-on-rails - 在代码中使用 sed