带有变量的sed正则表达式替换文件中的数字

use*_*507 2 linux perl sed

我试图通过添加一个数字来替换我的文本文件中的数字.即

sed 's/3/4/g' path.txt
sed 's/2/3/g' path.txt
sed 's/1/2/g' path.txt
Run Code Online (Sandbox Code Playgroud)

而不是这个,我可以自动化它,即找到一个/ d并在替换中添加一个.

就像是

sed 's/\([0-8]\)/\1+1/g' path.txt
Run Code Online (Sandbox Code Playgroud)

还想捕获多个数字,即([0-9])\t([0-9])更改每个数字,保持中间的选项卡

谢谢

编辑#2使用perl示例,我也希望它可以使用更多数字,即

perl -pi~ -e 's/(\d+)\.(\d+)\.(\d+)\.(\d+)/ ($1+1)\.($2+1)\.($3+1)\.($4+1) /ge' output.txt
Run Code Online (Sandbox Code Playgroud)

有关上述工作的任何提示吗?

tri*_*eee 6

算术输入不支持sed,但你可以在Perl中轻松完成.

perl -pe 's/(\d+)/ $1+1 /ge'
Run Code Online (Sandbox Code Playgroud)

使用该/e选项,替换表达式需要是有效的Perl代码.因此,您需要处理最终更新的示例

perl -pi~ -e 's/(\d+)\.(\d+)\.(\d+)\.(\d+)/ $1+1 . "." $2+1 . "." . $3+1 . "." . $4+1 /ge'
Run Code Online (Sandbox Code Playgroud)

其中字符串被正确引用,并且相邻字符串与.Perl字符串连接运算符连接在一起.(当它们与字符串连接时,算术数字也被强制转换为字符串.)

...当然,第一个脚本已经更优雅了,因为有了/g标志,它已经在字符串中的任何位置增加了每个数字序列.

  • 实际上Perl可以进行就地编辑,所以`perl -pi~ -e's /(\ d +)/ 1 + $ 1/ge'*.txt` (2认同)