2

我有一个带有以下字符串的文件:

||||||

我想用 替换每一次出现,||所以|""|我使用了

sed 's/||/|\"\"|/g' temp2.csv

但我得到的输出为:

|""||""||""|代替|""|""|""|""|""|

我发现 sed 没有递归地进行替换,我怎样才能让 sed 递归地进行替换,所以只有当上一行没有出现||

谢谢你的帮助。

4

3 回答 3

5

最直接的方法是调用 sed 替换两次。但我认为这个 sed 单线可能会更好,因为如果你说它有效,我想递归替换|||..{n}..||""|""|...{n}..|""|

sed ':a s/||/|""|/g; t a' file

用你的数据测试:

kent$  cat f
||||||

kent$  sed ':a s/||/|""|/g; t a' f
|""|""|""|""|""|
于 2013-10-18T15:20:37.103 回答
2

sed 不支持前瞻或后瞻,但在您的情况下,您可以进行第二次传递:

<temp2.csv sed 's/||/|\"\"|/g' | sed 's/||/|\"\"|/g'
于 2013-10-18T15:15:29.220 回答
-2

使用awk你可以这样做:

#echo '||||||' | awk '{gsub(/\|\|/,"|\"\"|")}1'
|""||""||""|
于 2013-10-18T15:23:49.030 回答