sed正则表达式中的空行无法找到东西

时间:2014-07-16 14:53:18

标签: regex sed

我在文本文件中有这个块。在vi中(根据View line-endings in a text file打开带有:set list的行尾字符的可视化),它会读取

 SHARE_INFO_FOR: SHARE/u_MYGROUP/$
 USER/GROUP   SHARES  PRIORITY  STARTED  RESERVED  CPU_TIME  RUN_TIME   ADJUST$
 u_zc        10000    3333.333     0        0         0.0        0       0.000$
 $
 SHARE_INFO_FOR: SHARE/u_MYSECONDGROUP/$

如果我尝试用sed隔离它,我会使用多行regexp

 sed -rn '/SHARE\/u_MYGROUP\//{:a;N;/^$/{/.*/p;d};ba}'

sed不识别块的结束行。 而如果我明确地把下一个非空行的内容放在了它的作用。

 sed -rn '/SHARE\/u_MYGROUP\//{:a;N;/SHARE\/u_MYSECONDGROUP\//{/.*/p;d};ba}'

我的问题当然是我一般不知道下一行中的组名是什么,所以我想用名称作为开始标记并将空行作为块标记的结尾来划分有趣的块。 / p>

你知道为什么^$不能作为sed中正则表达式的分隔符吗?

2 个答案:

答案 0 :(得分:2)

sed -n '\#SHARE/u_MYGROUP/#,/^$/{
 p
 }' YourFile

如果它只需要从具有SHARE/u_MYGROUP/的行开始打印块直到下一个第一个空行。它使用第一个转义字符为此

更改模式的默认分隔符(/)(#

答案 1 :(得分:0)

在awk被发明的20世纪70年代中期,所有sed语言构造用多行做任何事情都已经过时了:

$ awk -v RS= '/SHARE\/u_MYGROUP/' file
SHARE_INFO_FOR: SHARE/u_MYGROUP/
USER/GROUP   SHARES  PRIORITY  STARTED  RESERVED  CPU_TIME  RUN_TIME   ADJUST
u_zc        10000    3333.333     0        0         0.0        0       0.000