如何用变量替换部分awk命令?

时间:2016-05-08 01:04:03

标签: bash shell awk scripting

我有以下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

我真的很感激任何帮助。

3 个答案:

答案 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引号(至少这是我的想法)。