我想在行之间打印文本的部分(段落) 包含正则表达式,请帮助,如何通过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>
答案 0 :(得分:1)
正如已经指出的那样,grep
不是完成这项任务的理想工具。但是,如果您使用其中两个,它可能会起作用; - )
grep -Pzo "(?s)^$|<section>([^<]*${param}[^<]*)" "$FILE" | grep -v '<section>'
-Pzo
激活perl正则表达式,多行匹配并限制输出到匹配的部分,请参阅此related question。
请注意,输出与空格中awk
语句的输出不同,并非所有grep实现都支持-P
。