Unix-Sed替换子串

时间:2014-03-04 11:19:10

标签: unix sed

我是sed的新手。我想替换子字符串

例如:

var1=server1:game1,server2:game2,sever3:game1

输出应该是

server1 server2 server3 (with just spaces)

我试过这个。

echo $var1 | sed 's/,/ /g' | sed 's/:* / /g'

这不起作用。请提出解决方案。

4 个答案:

答案 0 :(得分:1)

您可以尝试此sed

echo $var1 | sed 's/:[^,]\+,\?/ /g'

<强>解释

:[^,]\+, - 它会匹配:,

的字符串

\? - 以前可能会发生或可能不发生(因为行尾没有,

答案 1 :(得分:0)

echo $var1 | sed s/:game[0-9],*/\ /

假设您的子字符串包含game后跟一个数字([0-9]*

答案 2 :(得分:0)

使用与awk

相同的regex的{​​{1}}变体
sed

PS它总是很好地定制“引用”变量

答案 3 :(得分:0)

仅供参考,您实际上只是匹配而不是替换,所以grep可以成为您的朋友(使用-P):

grep -oP '[^:,=]+(?=:)'  

使用lookahead匹配许多不是:,=后跟:的字符。

这会将服务器放在不同的行上,这可能是你想要的。您可以通过添加tr

将它们放在一行上
grep -oP '[^:,=]+(?=:)' | tr '\n' ' '