我有一个包含此模式的文件:
X 10
X 523
X 78
现在我想使用sed
命令将每行的数字减去 2,如下所示:
X 8
X 521
X 76
如果这种模式是X 100
并且X 200
我想使用命令我该如何使用和for
的组合?for
sed
我尝试了这个但是没有用:
for i in {100..200}; do sed -i 's/X $i/X $(i-2)/g' file.txt; done
提前致谢。
答案1
如果保证数字大于 0,则可以使用:
sed -i '
s/\b[0-9]\+\b/&♪/; t a
:a
s/9♪/♪8/; t b
s/8♪/♪7/; t b
s/7♪/♪6/; t b
s/6♪/♪5/; t b
s/5♪/♪4/; t b
s/4♪/♪3/; t b
s/3♪/♪2/; t b
s/2♪/♪1/; t b
s/1♪/♪0/; t b
s/0♪/♪9/; t a
:b
s/♪//
s/\b0*\([0-9]\)/\1/
' file.txt
(这会减少一。要减少二,请运行两次。它目前还不支持负数。)
如果您不介意失去良好的列对齐,您也可以使用“awk”:
awk '{$2 -= 2; print}' file.txt > file_new.txt
您的“for”示例不起作用,因为您使用了不正确的引号和不正确的扩展——变量扩展仅发生在双引号、单引号内,并且数学表达式运算符是$(( ))
,而不是$( )
。
for i in {100..200}; do sed -i "s/X $i/X $((i-2))/g" file.txt; done