如何使用sed从文件中打印行,其中行号存储为变量

时间:2013-05-01 21:16:15

标签: bash variables sed

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

这是我到目前为止所拥有的:

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

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

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

其中变量是我存储的行号。

我知道上面的内容不是正确的语法,从很多关于这个问题的研究来看,但是我用过的所有东西都会返回错误或者不起作用。我已经尝试过双引号,单个然后双重变量,大括号变量,以及其他一些东西以及许多不同的语法样式。有人会碰巧知道我怎么能正确地做到这一点吗?

2 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:3)

我希望以下示例回答您的问题:

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