使用sed提取行范围

时间:2018-07-20 20:11:18

标签: bash sed

我定义了两个变量,如下所示:

var1=$(unzip -c ./*.zip | grep -n "Channel8"| cut -f1 -d":")
var2=$(unzip -c ./*.zip | grep -n "Channel10"| cut -f1 -d":")

我的文件很大,我想使用sed提取$var1$var2之间的行范围。我正在尝试以下

sed -n '/"$var1","$var"2p' $(unzip -c ./*.zip)

但是没有成功。您能否解释为什么以及如何解决?谢谢。

3 个答案:

答案 0 :(得分:3)

您可以使用:

unzip -c ./*.zip | sed -n "$var1,$var2 p"

解决方法是:

  • 不对shell变量使用单引号
  • 从sed命令中删除前导/
  • 使用管道代替命令替换

答案 1 :(得分:3)

变量不会在单引号内扩展。另外,您需要将unzip的输出传递给sed,而不是将其用作命令行参数。

unzip -c ./*.zip | sed -n "${var1},${var2}p"

但是看来您正在这样做,读取zip文件3次。只需使用要匹配的模式作为范围:

unzip -c ./*.zip | sed -n '/^extracting:.*Channel8/,/^extracting:.*Channel10/p'

答案 2 :(得分:0)

使用双引号扩展变量:

sed -n "${var1},${var2}p" $(unzip -c ./*.zip)