我需要帮助对文件执行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
其他尝试要么根本不做任何改变,要么产生截然不同的结果。我觉得我很亲密,但到目前为止。任何帮助将不胜感激!
答案 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位端口号。