我遇到了各种使用 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;}"
两点:
您的版本所能期望的最好结果是搜索“
$var
”。要搜索“/somePath/to/my/home
”,您必须将单引号 ('
) 替换为双引号 ("
),以便将“$var
”替换为“/somePath/to/my/home
”。在中
sed
,分隔正则表达式可能类似于
/
正则表达式/
或者
\
其他分隔符正则表达式
其他分隔符(重复)
因此您需要在\
之前:
。
答案2
设置变量“var”时,请转义反斜杠:
var="\/somePath\/to\/my\/home"
sed -n "/$var/{n;p;}" file