我想打印行之间的文本部分(段落) 包含正则表达式,请帮忙,如何通过 grep 而不是 awk 或 sed 来完成,或者通过 grep 查找正则表达式并使用 awk|sed 打印。我在脚本中使用它,并且 regexp - 是变量。 param - 是扩展正则表达式 (ERE) 的模式
awk -v RS="<section>" "/$param/" "$FILE" <!--it's now, but I need to find param by grep-->
文件示例:
<section>
interface gigabitEthernet 7 // 192.168.248.200
switchport access vlan 1
switchport mode access
port shutdown
<section>
interface gigabitEthernet 8 //
switchport access vlan 2
switchport mode trunk
<section>
最佳答案
正如已经指出的那样,grep
并不是执行此任务的理想工具。但是,如果您使用其中两个,它可能会起作用;-)
grep -Pzo "(?s)^$|<section>([^<]*${param}[^<]*)" "$FILE" | grep -v '<section>'
-Pzo
激活perl正则表达式,多行匹配并限制输出到匹配的部分,参见这个related question .
请注意,输出与 awk
语句的空格输出不同,并且并非所有 grep 实现都支持 -P
。
关于regex - bash:使用正则表达式 grep 段落,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29676616/