regex - bash:使用正则表达式 grep 段落

标签 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>

最佳答案

正如已经指出的那样,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/

相关文章:

linux - 如何检查 sshd 是否在远程机器上运行

bash - 在 xargs 和 sed 或 awk 中使用反引号或 $()

c# - IE 用户代理正则表达式(包括 IE11 和紧凑 View )

适用于 Ubuntu 12.04 的 C++ 编译器/SDK - Netbeans

linux - 如何更改 GCC 版本

macos - setenv 在 mac 上等效?

mysql - 在 R 中用查询替换表达式参数

javascript - Xregexp javascript 可选命名组,以空格分隔

c# - 匹配日期范围的正则表达式

linux - 并行运行 bash shell 并等待