如何使用SED或任何其他实用程序进行递归编辑

时间:2014-11-13 09:35:49

标签: unix recursion sed

我有一个字符串如下:

set str = "A,,,,,,,,,,,,,,,B,,,,,,,C,,,,,,,,,,D,,,,,,,,,,,,E"

我想在它上面运行一个sed,以便最终结果是

"A,B,C,D,E"

我尝试使用
这样做 sed 's/,,/,/g' 但有了这个,它只会减少逗号的数量。

echo $str | sed 's/,,/,/g' == A,,,,,,,,B,,,,C,,,,,D,,,,,,E

你能建议一种可以给我$ str_out更小/更短命令的方法吗?

2 个答案:

答案 0 :(得分:3)

将您的sed命令更改为,

sed 's/,\+/,/g'

在BRE中\+会重复前一个字符一次或多次。因此,\+匹配一个或多个逗号。用一个逗号替换匹配的逗号将为您提供所需的输出。

示例:

$ echo 'A,,,,,,,,,,,,,,,B,,,,,,,C,,,,,,,,,,D,,,,,,,,,,,,E' | sed 's/,\+/,/g'
A,B,C,D,E

答案 1 :(得分:0)

也可以尝试:

$ echo 'A,,,,,,,,,,,,,,,B,,,,,,,C,,,,,,,,,,D,,,,,,,,,,,,E' | tr -s ','
A,B,C,D,E

$ echo 'A,,,,,,,,,,,,,,,B,,,,,,,C,,,,,,,,,,D,,,,,,,,,,,,E' | tr -s ',' ' '
A B C D E