首页 文章

bash:grep段与正则表达式

提问于
浏览
-2

我想打印包含regexp的行之间的文本部分(段落),请帮忙,如何通过grep,不是awk或sed来完成,或者通过grep找到regexp并使用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 回答

  • 1

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

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

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

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

相关问题