2

我需要帮助对文件执行 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

其他尝试要么根本没有改变,要么有截然不同的结果。我觉得我很近,却又很远。任何帮助将非常感激!

4

2 回答 2

2

为什么你不能只是

sed 's/20$/21/'

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

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

&它使用代替\1,它只重复括号匹配的部分。

于 2013-03-05T20:31:18.360 回答
1

这应该有效:

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

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

示例: http ://regexr.com?340vk

于 2013-03-05T20:38:33.080 回答