gpt4 book ai didi

linux - 如何将行号变量传递给 sed,以删除该行之后的所有行

转载 作者:行者123 更新时间:2023-12-02 18:39:15 27 4
gpt4 key购买 nike

我在 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

我不确定为什么第一个可以工作但第二个不行。任何帮助表示赞赏!

最佳答案

sed "${line_number},$d" 中,第二个 $ 也由 bash 解释。 Bash 会看到 $d 并将其扩展,如果您没有为 d 分配任何值,则可能会扩展为空字符串。您有效地执行了诸如 sed '5,' 之类的命令,它解释了意外的逗号

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

sed "$line_number,\$d"

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

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

关于linux - 如何将行号变量传递给 sed,以删除该行之后的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68273356/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com