首页 > 解决方案 > 如何将行号变量传递给 sed,以删除该行之后的所有行

问题描述

我无法在 bash 脚本中将此变量传递给 sed。按照这种语法,我能够成功地完成我所要求的相反操作(删除指定行号之前的所有行)。

    sed "1,${line_number}d"

但是尝试重新创建一个类似的答案以在行号连续给我错误之后删除所有行。我试过以下:

    sed "${line_number},$d" #results in unexpected comma
    sed "|${line_number}|,|$d|" #trying to use a separator gives me an error for missing command

我不确定为什么第一个会起作用,而第二个不会。任何帮助表示赞赏!

标签: linuxbashsed

解决方案


sed "${line_number},$d"第二个$也是由 bash 解释的。Bash 看到$d并扩展它,如果你没有给d. 您有效地执行了类似sed '5,'解释unexpected comma.

要解决此问题,请转义第二个$

sed "$line_number,\$d"

顺便说一句,$line_number您也可以提取$((line_number-1))第一行,而不是删除从您开始的行,这可能更快:

head -n "$((line_number-1))"

推荐阅读