【发布时间】:2020-01-03 18:03:27
【问题描述】:
我正在运行 ansible playbook 任务,使用 shell 命令根据正则表达式匹配从文件中提取数据并将其保存到另一个文件中。
我尝试使用 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
预期输出: 猫文件1.txt
-m comment --comment "Echo Request"
-m comment --comment "tcp"
cat file2.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
【问题讨论】:
-
您的 AWK 脚本有不匹配的双引号。
-
你的 sed 脚本语法错误
-
@JUSHJUSH 我正在尝试提取双引号,因此我将双引号作为匹配字符。你能指出我正确的 sed 语法吗?
-
wrt
I know regex is right as I tested with regex tester- 证明正则表达式在某些在线工具中有效仅证明它在该在线工具中有效。这并不意味着它可以在 sed、awk 或任何其他命令行工具中工作。正则表达式变体、工具变体、扩展、分隔符、选项等太多了,以至于您认为可以在 foo 中测试正则表达式,这意味着它可以在 bar 中工作。
标签: regex awk sed text-parsing