Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何用变量替换awk命令的一部分?_Bash_Shell_Awk_Scripting - Fatal编程技术网

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

Bash 如何用变量替换awk命令的一部分?,bash,shell,awk,scripting,Bash,Shell,Awk,Scripting,我有下面的awk命令可以工作 awk 'BEGIN{RS="</a>"; ORS=RS"\n"} /<p>Test2<\/p>/' file 如上所述,我在脚本中使用此命令,因此我尝试直接使用脚本变量替换,但也没有成功 AWK_SEARCH="Test2" awk 'BEGIN{RS="</a>"; ORS=RS"\n"} /<p>${AWK_SEARCH}<\/p>/' file AWK_SEARCH=“Test2”

我有下面的
awk
命令可以工作

awk 'BEGIN{RS="</a>"; ORS=RS"\n"} /<p>Test2<\/p>/' file
如上所述,我在脚本中使用此命令,因此我尝试直接使用脚本变量替换,但也没有成功

AWK_SEARCH="Test2"
awk 'BEGIN{RS="</a>"; ORS=RS"\n"} /<p>${AWK_SEARCH}<\/p>/' file
AWK_SEARCH=“Test2” awk'BEGIN{RS=”“;ORS=RS“\n”}/${awk\u SEARCH}/'文件
非常感谢您的帮助。

您需要“取消引用”脚本变量:

#!/bin/bash
AWK_SEARCH="Test2"
awk 'BEGIN{RS="</a>"; ORS=RS"\n"} /<p>'"${AWK_SEARCH}"'<\/p>/' file
#/bin/bash
AWK_SEARCH=“Test2”
awk'BEGIN{RS=”“;ORS=RS“\n”}/”${awk_SEARCH}“/'文件

它是在脚本变量之前“停止”awk引号,将脚本变量用双引号括起来,然后在脚本变量之后“继续”awk引号(至少我是这么认为的)。

您需要“取消”脚本变量:

#!/bin/bash
AWK_SEARCH="Test2"
awk 'BEGIN{RS="</a>"; ORS=RS"\n"} /<p>'"${AWK_SEARCH}"'<\/p>/' file
#/bin/bash
AWK_SEARCH=“Test2”
awk'BEGIN{RS=”“;ORS=RS“\n”}/”${awk_SEARCH}“/'文件

它是在脚本变量之前“停止”awk引号,将脚本变量用双引号括起来,然后在脚本变量之后“继续”awk引号(至少我是这么认为的)。

这可能就是您想要的:

 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 
var=“test2”#动态内容,您可以将其设置为“$1”,并将值作为
#脚本的参数
awk-v awk_var=“$var””
开始{RS=”“;ORS=RS“\n”}
$0~““awk_var”

“'37095194.txt
这可能就是您想要的:

 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 
var=“test2”#动态内容,您可以将其设置为“$1”,并将值作为
#脚本的参数
awk-v awk_var=“$var””
开始{RS=”“;ORS=RS“\n”}
$0~““awk_var”

“'37095194.txt
awk-v tgt=“Test2”开始{RS=”“;ORS=RS”\n;tgt=“”tgt”

“}$0~tgt”文件
修改BEGIN部分中的变量比在每个输入行连接然后测试字符串一次要高效得多。

”}$0~tgt”文件

在BEGIN部分修改变量比在每个输入行连接然后测试字符串一次要高效得多。

@John1024:谢谢!更正:D@John1024:谢谢你!更正:DNo。永远不要这样做。错误的方法是100%错误的,因为它在awk解释器看到它之前将shell变量的值扩展为awk脚本文本的一部分,这可能会导致各种各样的神秘失败,因为该shell变量的可能值。看,不。永远不要这样做。错误的方法是100%错误的,因为它在awk解释器看到它之前将shell变量的值扩展为awk脚本文本的一部分,这可能会导致各种各样的神秘失败,因为该shell变量的可能值。请参阅。如果您
导出AWK_搜索
,那么在AWK中您可以使用
环境[“AWK_搜索”]
,但是@EdMorton的答案是一种更好的方法。如果您
导出AWK_搜索
,那么在AWK中您可以使用
环境[“AWK_搜索”]
,但是@EdMorton的答案是一种更好的方法。