Regex 如何在模式(AWK)中找到匹配字符串?
我有一个文本文件,模式是开始--Host'和结束';',此模式在文件中出现的次数如下: --主机(第一个)Sid(第1个) ——公主王子/国王1/1 强> --主机(第一个)Sid(第二个) ——公主王子/国王2/2 强> --主机(第一个)Sid(皇后3) --dir公主/king 3/3 强> 我期望的结果如下: queen1 1/1 queen2 2/2 皇后区3/3 使用AWK,我想我可以指定包含此模式的块,如下所示。但是,我在将第二个模式放入模式时出错 你能帮我完成这个要求吗?谢谢Regex 如何在模式(AWK)中找到匹配字符串?,regex,awk,Regex,Awk,我有一个文本文件,模式是开始--Host'和结束';',此模式在文件中出现的次数如下: --主机(第一个)Sid(第1个) ——公主王子/国王1/1 --主机(第一个)Sid(第二个) ——公主王子/国王2/2 --主机(第一个)Sid(皇后3) --dir公主/king 3/3 我期望的结果如下: queen1 1/1 queen2 2/2 皇后区3/3 使用AWK,我想我可以指定包含此模式的块,如下所示。但是,我在将第二个模式放入模式时出错 你能帮我完成这个要求吗?谢谢 BEGIN {
BEGIN {
}
/-- Host/,/;/ { /prince/ { print $3 } }
END
工作原理
这告诉awk使用任意数量的空格和括号的任意组合作为字段分隔符-F'[()]+'
/--Host/,//代码> 这只选择以
开头并以--Host
结尾的行组代码>。大括号中的命令仅对这些组中的行执行
如果该行包含{if(/--Host/)printf“%s”,$5;else if(/prince/)print$4;}
,则打印其第五个字段。否则,如果它包含--Host
,我们将打印它的第四个字段prince
$ awk -F'[ ()]+' '/-- Host/,/;/ { if (/-- Host/) printf "%s ",$5; else if (/prince/) print $4;}' file
queen1 1/1
queen2 2/2
queen3 3/3