【问题标题】:How to evaluate variable within `sed` command? [duplicate]如何在`sed`命令中评估变量? [复制]
【发布时间】:2015-12-12 04:43:04
【问题描述】:

我有一个名为“num”的变量,它包含一个数字。我想像这样在“sed”中使用它:

sed '1,$(num)d' file.txt

也试过了:

sed '1,($num)d' file.txt

...这样我就可以删除从 1 到行 num 的行。

它给了我这样的错误:

sed: -e expression #1, char 4: unknown command: `('

这样做的正确方法是什么?谢谢。

【问题讨论】:

    标签: bash variables sed gawk


    【解决方案1】:

    您的 shell 变量使用不正确。首先,使用双引号可确保 shell 扩展变量。其次,用大括号将有问题的变量 (num) 括起来可确保 shell 将变量视为$num,而不是随后的d 被标记。

    这里是你应该如何指定你想做什么:

    sed "1,${num}d" file.txt

    【讨论】:

    • 我想到了,但我认为双引号 "" 不会扩展 {},因为它们只会扩展斜杠、反引号和美元符号。我猜他们也会扩展{}?
    • 用大括号括住变量名是 shell 如何消除构成变量的字符与不应成为变量名一部分的任何尾随字符的歧义
    【解决方案2】:

    你可以使用单引号,但需要连接脚本

    num=42; seq 1 45 | sed '1,'$num'd'
    

    将打印

    43
    44
    45
    

    正如预期的那样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 2013-10-09
      相关资源
      最近更新 更多