使用 sed 打印匹配后的下一行

使用 sed 打印匹配后的下一行

我遇到了各种使用 awk 和 sed 在匹配后打印下一行的示例。我在我的代码中使用它,它运行良好。现在我想使用变量而不是硬编码值来进行模式匹配。搜索模式字符串包含正斜杠“/”。如何使用其中包含“/”的变量并使用它来打印匹配后的下一行?以下方法似乎不起作用:

 var="/somePath/to/my/home"  
 val=`echo -e "$someStr" | sed -n ':$var:{n;p;}'`

在这种情况下,val 始终为空白。我使用“:”作为分隔符,而不是“/”。我在 Mac OS X 上。

答案1

更改命令sed如下:

sed -n "\:$var: {n;p;}"

两点:

  1. 您的版本所能期望的最好结果是搜索“ $var”。要搜索“ /somePath/to/my/home”,您必须将单引号 ( ') 替换为双引号 ( "),以便将“ $var”替换为“ /somePath/to/my/home”。

  2. 在中sed,分隔正则表达式可能类似于

/     正则表达式     /

或者

\其他分隔符   正则表达式   其他分隔符(重复)

因此您需要在\之前:

答案2

设置变量“var”时,请转义反斜杠:

var="\/somePath\/to\/my\/home"
sed -n "/$var/{n;p;}" file

相关内容