我有一个带有以下字符串的文件:
||||||
我想用 替换每一次出现,||
所以|""|
我使用了
sed 's/||/|\"\"|/g' temp2.csv
但我得到的输出为:
|""||""||""|
代替|""|""|""|""|""|
我发现 sed 没有递归地进行替换,我怎样才能让 sed 递归地进行替换,所以只有当上一行没有出现||
谢谢你的帮助。
最直接的方法是调用 sed 替换两次。但我认为这个 sed 单线可能会更好,因为如果你说它有效,我想递归替换|||..{n}..|
成|""|""|...{n}..|""|
sed ':a s/||/|""|/g; t a' file
用你的数据测试:
kent$ cat f
||||||
kent$ sed ':a s/||/|""|/g; t a' f
|""|""|""|""|""|
sed 不支持前瞻或后瞻,但在您的情况下,您可以进行第二次传递:
<temp2.csv sed 's/||/|\"\"|/g' | sed 's/||/|\"\"|/g'
使用awk
你可以这样做:
#echo '||||||' | awk '{gsub(/\|\|/,"|\"\"|")}1'
|""||""||""|