我正在学习使用sed并有一个假设的要求:
bash$ cat states
California
Massachusetts
Arizona
Wisconsin
我想要输出:(基本上我只需要一个空行)
California
Massachusetts
Arizona
Wisconsin
请建议使用sed的方法。 它应该使用多线模式空间等概念吗?
谢谢,
Jagrati
在回复其中一条评论时,好的,我运行了一些测试脚本,而错误的假设是地址空间选择标准只应用一次。它似乎一次又一次被激活。
bash$ cat file
a
b
c
a
b
c
bash$ sed -e '/a/,/b/s/$/x/g' file
ax
bx
c
ax
bx
c
我的印象是它会产生:
ax
bx
c
a
b
c
如果有逗号分隔的地址空间,有人可以解释一下sed是如何进行的。
答案 0 :(得分:6)
尝试此操作将删除所有连续的空行
cat states | sed '/./,/^$/!d'
输出:
California
Massachusetts
Arizona
Wisconsin
答案 1 :(得分:2)
我知道OP明确要求使用sed和/或awk的解决方案,但问题也可以用cat解决:
cat -s file
否则,这是解决sed问题的另一种方法:
sed '/./!d; G' file
利用G将空行附加到文件中找到的所有非空行。
答案 2 :(得分:2)
这可以在没有sed
的情况下完成,但也不符合您的学习要求sed
:
cat -s states
值得注意的是,在info sed
中为GNU sed
执行此操作的三个示例都比dalton's和marco's答案复杂得多。
这些版本压缩成一行:
sed ':x;/^\n*$/{N;bx};s/\n*/\n/' states
sed '1,/^./{/./!d};:x;/./!{N;s/^\n$//;tx}' states
sed -ne '/./!d;:x;p;n;/./bx;:z;n;/./!bz;i\ ' -e 'bx' states
答案 3 :(得分:1)
你也可以使用awk
$ cat file
California
Massachusetts
Arizona
Wisconsin
$ awk 'NF{print;print ""}' file
California
Massachusetts
Arizona
Wisconsin
答案 4 :(得分:0)