我有一个带有以下字符串的文件:
||||||
我想用||
替换|""|
的每一次出现,所以我使用了
sed 's/||/|\"\"|/g' temp2.csv
但我得到了输出:
|""||""||""|
代替|""|""|""|""|""|
我发现sed没有递归替换,我怎么能让sed以递归方式进行替换,所以只有当前一行没有||
感谢您的帮助。
答案 0 :(得分:5)
最直接的方式是将sed替换称为两次。但是我觉得这个sed单行可能会更好,因为如果你说,我想以递归方式将|||..{n}..|
替换为|""|""|...{n}..|""|
sed ':a s/||/|""|/g; t a' file
使用您的数据进行测试:
kent$ cat f
||||||
kent$ sed ':a s/||/|""|/g; t a' f
|""|""|""|""|""|
答案 1 :(得分:2)
sed不支持lookahead或lookbehind,但在你的情况下你可以再次传递:
<temp2.csv sed 's/||/|\"\"|/g' | sed 's/||/|\"\"|/g'
答案 2 :(得分:-2)
使用awk
即可:
#echo '||||||' | awk '{gsub(/\|\|/,"|\"\"|")}1'
|""||""||""|