我正在使用 shell 命令运行 ansible playbook 任务,根据正则表达式匹配从文件中提取数据并将其保存到另一个文件中。
我尝试使用 awk 和 sed 但无法使正则表达式正常工作。
awk '$NF == "-m.comment.*\""' iptable.txt" > file1.txt
sed 's/\/.*' iptable.txt > file2.txt
我需要保存从-m comment
双引号开始的任何内容。到 file1.txt,剩余的内容到 file2.txt。如果该行没有注释字段,则应仅将其保存到 file2.txt。
-P INPUT ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p icmp -m state --state NEW -m comment --comment "Echo Request" -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m comment --comment "tcp" -j ACCEPT
预期输出:cat file1.txt
-m comment --comment "Echo Request"
-m comment --comment "tcp"
猫文件2.txt
-P INPUT ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p icmp -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m state --state NEW -j ACCEPT
使用 GNU awk 来匹配第三个参数():
awk 'match($0,/(.*)(-m.comment.*")(.*)/,a) {
print a[2] " > foo"
print a[1] a[3] " > bar"
}' file
-m comment --comment "Echo Request" > foo
-A INPUT -p icmp -m state --state NEW -j ACCEPT > bar
使用任何 awk:
awk 'match($0,/-m.comment.*"/) {
print substr($0,RSTART,RLENGTH) " > foo"
print substr($0,1,RSTART-1) substr($0,RSTART+RLENGTH) " > bar"
}' file
只要改变" > foo"
以> "foo"
和同上,对酒吧真正写入新文件。
如果这不是您所需要的,那么编辑您的问题以阐明您的要求并提供更真实的代表性示例输入/输出。
哦,当你写道:
$NF == "-m.comment.*\""
-m.comment.*\"
作为正则表达式本身没有任何问题,但是==
告诉 awk 进行文字字符串比较,而不是正则表达式比较。
鉴于您更新的问题,只需将上述内容调整为:
awk 'match($0,/(.*)(-m.comment.*")(.*)/,a) {
print a[2] " > foo"
print a[1] a[3] " > bar"
next
}
{ print $0 " > bar" }' file
-P INPUT ACCEPT > bar
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT > bar
-m comment --comment "Echo Request" > foo
-A INPUT -p icmp -m state --state NEW -j ACCEPT > bar
-m comment --comment "tcp" > foo
-A INPUT -p tcp -m state --state NEW -j ACCEPT > bar
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句