sed和正则表达式问题

时间:2013-03-05 20:27:52

标签: regex sed

我需要帮助对文件执行sed语句,我似乎无法弄清楚为什么我的工作不起作用。我已经彻底搜索了,每个结果都会出现类似的结果,但是我不明白为什么我的结果没有达到预期效果。

我有一个包含多个列表的文件,例如

192.168.10.23:7020
192.168.10.23:4520
192.168.10.23:3320

等。基本上我需要用192.168.10.23:XX21替换192.168.10.23:XX20。

其中,我曾尝试过:

sed 's/\:\([0-9]\)\{2\}20/\:&21/g' $file

给出的结果如下:

192.168.10.23:702021
192.168.10.23:452021
192.168.10.23:332021

还有:

sed 's/\:\([0-9]\)\{2\}/\:&21/g'

给出的结果如下:

192.168.10.23:702120
192.168.10.23:452120
192.168.10.23:332120

其他尝试要么根本不做任何改变,要么产生截然不同的结果。我觉得我很亲密,但到目前为止。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

为什么你不能

sed 's/20$/21/'

但也有可能,本着原始解决方案的精神:

sed 's/\(:[0-9]*\)20/\121/'

而不是&,它使用\1,它只重复与括号匹配的部分。

答案 1 :(得分:1)

这应该有效:

sed 's/:\([0-9]\{0,3\}\)20/:\121/g' $file

此外,我假设您的端口号将是2位数到5位端口号。

实施例: http://regexr.com?340vk