我有以下awk
命令可以运行...
awk 'BEGIN{RS="</a>"; ORS=RS"\n"} /<p>Test2<\/p>/' file
但现在我需要用shell脚本变量替换Test2
。
我尝试使用如下所示的-v
选项,但没有成功
awk -v ss="Test2" 'BEGIN{RS="</a>"; ORS=RS"\n"} /<p>{print ss}<\/p>/' file
正如我上面所说,我在脚本中使用此命令,所以我试图直接使用我的脚本变量替换,但也没有成功...
AWK_SEARCH="Test2"
awk 'BEGIN{RS="</a>"; ORS=RS"\n"} /<p>${AWK_SEARCH}<\/p>/' file
我真的很感激任何帮助。
答案 0 :(得分:3)
这可能就是你要找的东西:
var="test2"; #dynamic content, you can set it to "$1" and pass the value as
#argument to script
awk -v awk_var="$var" '
BEGIN{RS="</a>"; ORS=RS"\n"}
$0 ~ "<p>"awk_var"</p>"' 37095194.txt
答案 1 :(得分:2)
awk -v tgt="Test2" 'BEGIN{RS="</a>"; ORS=RS"\n"; tgt="<p>"tgt"</p>"} $0 ~ tgt' file
修改BEGIN部分中的变量比连接然后每个输入行测试一次字符串效率要高得多。
答案 2 :(得分:0)
您需要“取消引用”您的脚本变量:
#!/bin/bash
AWK_SEARCH="Test2"
awk 'BEGIN{RS="</a>"; ORS=RS"\n"} /<p>'"${AWK_SEARCH}"'<\/p>/' file
它在脚本变量之前“停止”awk引号,将脚本变量括在双引号中,然后在脚本变量之后“继续”awk引号(至少这是我的想法)。