bash:grep带有regexp的段落

bash:grep带有regexp的段落,regex,linux,bash,grep,Regex,Linux,Bash,Grep,我想在行间打印文本的一节(段落) 包含regexp,请帮助,如何由grep而不是awk或sed完成,或者通过grep查找regexp并使用awk | sed打印。我在脚本中使用它,regexp-是变量。 param-是扩展正则表达式(ERE)的一种模式 awk-v RS=“”/$param/“$FILE” 文件示例: <section> interface gigabitEthernet 7 // 192.168.248.200 switchport access vlan

我想在行间打印文本的一节(段落) 包含regexp,请帮助,如何由grep而不是awk或sed完成,或者通过grep查找regexp并使用awk | sed打印。我在脚本中使用它,regexp-是变量。 param-是扩展正则表达式(ERE)的一种模式

awk-v RS=“”/$param/“$FILE”
文件示例:

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

接口千兆以太网7//192.168.248.200
交换机端口访问vlan 1
交换机端口模式访问
端口关闭
接口千兆位以太网8//
交换机端口访问vlan 2
交换机端口模式中继

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


grep-Pzo”(?s)^$|([^code>$param
在这种情况下是什么?你期望的输出是什么?你不能。有很多工具可以轻松地完成这项工作,但
grep
不是其中之一。$param-是正则表达式或模式,所以我昨天无法读取消息。我期望的输出是(如果param是[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}):interface gigabitEthernet 7//192.168.248.200 switchport access vlan 1 switchport mode access port Shutdown非常感谢,但是可以用grep-E查找段落吗,或者我可以做其他事情吗?param的模式是扩展正则表达式(ERE)@ССчСччСччСччСчччСчччччччч:我不认为用
-E
可以完成。毕竟,
grep
仍然是一个基于行的工具。但是你可能会发现你的ERE
<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 -Pzo "(?s)^$|<section>([^<]*${param}[^<]*)" "$FILE" | grep -v '<section>'