bash:grep段与正则表达式

时间:2015-04-16 13:43:30

标签: regex linux bash grep

我想在行之间打印文本的部分(段落) 包含正则表达式,请帮助,如何通过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>

1 个答案:

答案 0 :(得分:1)

正如已经指出的那样,grep不是完成这项任务的理想工具。但是,如果您使用其中两个,它可能会起作用; - )

grep -Pzo "(?s)^$|<section>([^<]*${param}[^<]*)" "$FILE" | grep -v '<section>'

-Pzo激活perl正则表达式,多行匹配并限制输出到匹配的部分,请参阅此related question

请注意,输出与空格中awk语句的输出不同,并非所有grep实现都支持-P