我正在使用AWK与模式进行多行匹配.
例:
awk '/"ip": /,/"id": /'
我想在知道ip时将参数传递给AWK,以便它将返回包含指定IP的行.例:
awk '/"ip": "$IP"/,/"id": /'
有什么方法可以做到?
我努力了:
awk '/"ip": "$IP"/,/"id": /'
awk '/"ip": "${IP}"/,/"id": /'
awk "/\"ip\": \"$IP\"/,/\"id'\": /"
我想知道如何在模式中使用这种方法:
var="hello"; awk -v a="$var"
谢谢.
回答
>已接受,可以在下面找到.
>有关如何使匹配更加精确的人的其他详细信息(使用变量为字符串模式).请注意,您不能用双引号将模式中使用的变量包装起来,即使将引号转义也不会起作用:
cat l.txt | awk '$0 ~ "\"ip\": \"103.6.181.43", $0 ~ "\"id\": \""' ===> works
cat l.txt | awk -v ipvar=103.6.181.43 '$0 ~ ipvar, $0 ~ "\"id\": \""' ===> works
cat l.txt | awk -v ipvar=103.6.181.43 '$0 ~ "\"ip\": \"ipvar", $0 ~ "\"id\": \""' ===> does not work
cat l.txt | awk -v ipvar=103.6.181.43 '$0 ~ "\"ip\": \""ipvar, $0 ~ "\"id\": \""' ===> works
最后,您可以包装/包围qoutes中使用的参数.相比:
awk -v ipvar=103.6.181.43 '$0 ~ "\"ip\": \"ipvar\"", $0 ~ "\"id\": \""' ===> will not work
awk -v ipvar=103.6.181.43 '$0 ~ "\"ip\": \""ipvar"\"", $0 ~ "\"id\": \""' ===> will work and is equivalent.
解决方法:
相反,请使用$0〜模式,这将为您提供更多的自由.毕竟,
/pattern1/,/pattern2
是相同的
$0 ~ pattern1, $0 ~ pattern2
因此,您可以使用-v提供值并说:
awk -v var="$bash_variable" '$0~"ip: " var,$0 ~ "id: " var'
# ^^^^^^^^^^^^^
# ^^^^^^^^^^^^^^^
# start end
测试
$cat a
hello
ip: 23
bye
and this is
id: 23
hehe
done
$awk -v var=23 '$0~"ip: " var,/id: /' a
ip: 23
bye
and this is
id: 23
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。