我是sed
的新手。我想替换子字符串
例如:
var1=server1:game1,server2:game2,sever3:game1
输出应该是
server1 server2 server3 (with just spaces)
我试过这个。
echo $var1 | sed 's/,/ /g' | sed 's/:* / /g'
这不起作用。请提出解决方案。
答案 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' ' '