我的 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