【发布时间】:2014-09-07 04:04:20
【问题描述】:
我在一个文本文件中有这个块。在 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 隔离它,我会使用多行正则表达式
sed -rn '/SHARE\/u_MYGROUP\//{:a;N;/^$/{/.*/p;d};ba}'
sed 不标识块的结束行。 而如果我明确输入 if next 非空行的内容,它就可以工作。
sed -rn '/SHARE\/u_MYGROUP\//{:a;N;/SHARE\/u_MYSECONDGROUP\//{/.*/p;d};ba}'
我的问题当然是一般我不知道下一行中的组名是什么,所以我想使用名称作为开始标记和空行作为块结束标记来分隔有趣的块。
你知道为什么^$ 不能作为 sed 中正则表达式的分隔符吗?
【问题讨论】:
-
该文件是否为 CRLF 结尾的 DOS 格式文件?在
vim中尝试:set,看看是fileformat=dos还是fileformat=unix。