我在文本文件中有这个块。在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中正则表达式的分隔符吗?
答案 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