我有一个字符串如下:
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更小/更短命令的方法吗?
答案 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