我在一个文件中有很多行文本--每一行都是这样的:
blah blah filename1 blah blah blah blah text { ANY TEXT ANY HERE } blah blah blah对于任何具有“文本{任何}”的行,我都试图将第三列($3)附加到找到的文本“文本{任何}”前面。
所以我有最后一部分在工作,我只需要拿3块钱:
cat data.txt | grep -oP 'text {/*?}'*为更准确的场景更新,这里是它的扫描代码的实际行(它是一个F5负载均衡器配置):
ltm virtual www.testapp.com_80 { creation-time 2021-09-11:00:01:39 destination 10.105.34.20:http ip-protocol tcp last-modified-time 2021-09-11:19:56:16 mask 255.255.255.255 profiles { http { } tcp { } } rules { HTTP_to_HTTPS_Redirect } source 0.0.0.0/0 source-address-translation { type automap } translate-address enabled translate-port enabled vs-index 14 }
ltm virtual www.testapp2.com_443 { creation-time 2022-02-17:05:06:52 destination 10.105.34.23:https ip-protocol tcp last-modified-time 2022-02-17:05:06:52 mask 255.255.255.255 profiles { http { } tcp { } } rules { HTTP_to_HTTPS_Redirect } source 0.0.0.0/0 translate-address enabled translate-port enabled vs-index 20 }这只是代表HUUGE配置文件的两行代码。
我只需要那一行的$3 (第3列)(每一行中都有VIP网站名称),用列出的irules“规则{ text in here }”打印
这两条线..。我正在寻找如下输出:
www.testapp.com_80 { HTTP_to_HTTPS_Redirect }
www.testapp2.com_443 { HTTP_to_HTTPS_Redirect }谢谢你的协助!
发布于 2022-08-23 23:08:37
$ awk 'match($0,/(^| )rules *{[^}]*}/){ x=$3; $0=substr($0,RSTART,RLENGTH); $1=x; print }' file
www.testapp.com_80 { HTTP_to_HTTPS_Redirect }
www.testapp2.com_443 { HTTP_to_HTTPS_Redirect }发布于 2022-08-23 23:43:13
使用sed,您可以尝试下面的代码。用GNU sed编写并测试它的-E选项,以启用ERE regex,以及您所显示的示例。使用sed的能力,使用捕获组将匹配的值存储到临时缓冲区内存中,稍后在sed中执行替换时可以使用该缓存。
下面是用于在下面的在线演示代码中使用的正则表达式的sed。
sed -E 's/^[^[:space:]]+[[:space:]]+[^[:space:]]+[[:space:]]+([^[:space:]]+) .*(\{[^}]*}).*/\1 \2/' Input_filehttps://stackoverflow.com/questions/73465797
复制相似问题