我需要帮助对文件执行 sed 语句,但我似乎无法弄清楚为什么我所拥有的不起作用。我已经彻底搜索过,每个结果都会出现类似的结果,但我只是不明白为什么我的结果没有我期望的结果。
我有一个包含多个列表的文件,例如
192.168.10.23:7020
192.168.10.23:4520
192.168.10.23:3320
等等。本质上我需要将 192.168.10.23:XX20 替换为 192.168.10.23:XX21。
除此之外,我还尝试过:
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
其他尝试要么根本没有改变,要么产生截然不同的结果。我感觉我离自己很近,但又很远。任何帮助将不胜感激!
最佳答案
为什么你不能
sed 's/20$/21/'
但也有可能,本着您最初的解决方案的精神:
sed 's/\(:[0-9]*\)20/\121/'
它使用\1
而不是&
,它只重复括号匹配的部分。
关于regex - sed 和正则表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15233432/