【问题标题】:How to print lines from a file using sed, where the line numbers are stored as variables如何使用 sed 打印文件中的行,其中行号存储为变量
【发布时间】:2013-04-25 22:53:09
【问题描述】:

我正在尝试打印出我使用行号确定的文件的特定部分,但是行号每天都会变化,所以我需要能够获取行号,将它们存储为变量,然后使用 sed 从存储的文件中删除行。

这是我目前所拥有的:

start-loader 是一个文件,里面包含我要打印的行,但也包含很多垃圾。

我可以使用sed -n '93,109p' start-loader 打印出我需要的东西,但我想做的是:

sed -n '$FL,$LFp' start-loader

变量是我存储的行号。

根据对此事的大量研究,我知道上述语法不正确,但我使用的所有内容要么返回错误,要么不起作用。我已经尝试过双引号,变量的单引号,变量的大括号以及其他一些东西以及许多不同的语法样式。有人会碰巧知道我该如何正确地做到这一点吗?

【问题讨论】:

    标签: bash variables sed


    【解决方案1】:

    您需要以某种方式将p 命令与最后一行变量分开。以下任何一项都应该有效:

    $ sed -n "$FL,${LF}p" start-loader
    $ sed -n "$FL,$LF p" start-loader
    

    如果不进行分隔,shell 会尝试扩展不存在的变量LFp,从而导致将空字符串传递给sed,并导致语法错误。

    您还需要使用双引号,而不是单引号,以允许在 sed 看到变量之前展开变量。

    【讨论】:

    • 非常好,这正是我需要的。谢谢。
    【解决方案2】:

    我希望下面的例子回答了你的问题:

    kent$  s=3
    kent$  e=8
    kent$  seq 20 |sed -n "$s,$e p"
    3
    4
    5
    6
    7
    8
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-12
      • 1970-01-01
      • 2015-10-28
      • 2021-01-30
      • 1970-01-01
      • 1970-01-01
      • 2018-08-29
      相关资源
      最近更新 更多