如何在 sed 命令中使用数字?

如何在 sed 命令中使用数字?

我有一个包含此模式的文件:

X   10
X   523
X   78

现在我想使用sed命令将每行的数字减去 2,如下所示:

X   8
X   521
X   76

如果这种模式是X 100并且X 200我想使用命令我该如何使用和for的组合?forsed

我尝试了这个但是没有用:

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

相关内容