我有以下案文:
Disable Automounting /usr/bin/systemctl is-enabled autofs | /usr/bin/awk '{print} END {if(NR==0) print "disabled" }'
Ensure nodev option set on /home partition for i in /etc/fstab; do /bin/echo '==========' `/bin/ls -la $i`; /bin/cat $i; done我想通过匹配获得这两行中的cmd行:
usr/bin/systemctl is-enabled autofs | /usr/bin/awk '{print} END {if(NR==0) print "disabled"
/,}',->,/,for,done,->,for,for,done,->,for,done,->,for,for,done,->,for,for,done,->,}',->,}',}',->,->,for,done,->,for,done,->,}',->,for,for,done,->,}',}',->,for,done,->,for,done,->,for之间的/和}'->之间的东西,for和done->for之间的东西。我成功地使用了一个匹配组:for(.*)done
但我不能两者兼得。
谢谢
发布于 2021-03-29 16:23:20
您可以很容易地使用PCRE的展望和查找功能来实现您想要的目标,而且由于GNU grep支持PCRE (虽然sed和awk不支持),您可以使用以下内容:
#!/bin/sh
grep -Po "(?<=\/)(.*?)(?= }')|(?<=for )(.*?)(?= done)" <<-'EOF'
Disable Automounting /usr/bin/systemctl is-enabled autofs | /usr/bin/awk '{print} END {if(NR==0) print "disabled" }'
Ensure nodev option set on /home partition for i in /etc/fstab; do /bin/echo '==========' `/bin/ls -la $i`; /bin/cat $i; done
EOF(?<=\/)(.*?)(?= }')匹配/和}'之间的内容,(?<=for )(.*?)(?= done)匹配for和done之间的内容。两个表达式之间的|只是PCRE运算符。
https://stackoverflow.com/questions/66603400
复制相似问题