搜索并替换文件中一行中的字符

搜索并替换文件中一行中的字符

我的 Linux 机器上有一个文件:

1234 | 456 |"abc | xyz"|  fid|

我想用逗号替换|之间的which 。" "仅位于 abc 和 xyz 之间的管道。这一行是包含类似行的文件的一部分,但只能有一个 |包含在“”中。有人可以帮忙吗?

答案1

echo '1234 | 456 |"abc | xyz"| fid|' | \
sed 's/\([^|]*|[^|]*|[^|]*\)|/\1,/'

产生这个。

1234 | 456 |"abc , xyz"| fid|

这条 sed 行的工作原理是寻找不是管道的东西、管道、更多不是管道的东西、管道、更多不是管道的东西,最后被排除在反向引用之外的感兴趣的管道。它用反向引用替换所有内容,然后用逗号代替最后的管道。该行的其余部分保持不变。

答案2

我通过以下方法得到答案并澄清了 terdon 问题


echo '1234 | 456 |"abc | xyz"|  fid|' | sed "s:|:,:3"

答案3

假设您想替换|每行之间的引号,这应该可行:

sed 's/"\([^"]*\)|\([^"]*\)"/"\1,\2"/' yourfile

相关内容