【发布时间】:2011-06-06 19:12:02
【问题描述】:
如何使用 sed 只删除三个空行?
例如:
MyText.txt
第1行 线2 第 3 行 第 4 行使用 sed 我希望结果看起来像这样
MyText.txt
我可以用
删除双空行 sed -i '/^$/{ ñ /^\n$/D }' MyText.txt但是我的目标是删除三个空行,并且只删除三个空行。
任何帮助将不胜感激。
【问题讨论】:
如何使用 sed 只删除三个空行?
例如:
MyText.txt
第1行 线2 第 3 行 第 4 行使用 sed 我希望结果看起来像这样
MyText.txt
我可以用
删除双空行 sed -i '/^$/{ ñ /^\n$/D }' MyText.txt但是我的目标是删除三个空行,并且只删除三个空行。
任何帮助将不胜感激。
【问题讨论】:
以下代码仅删除三个(既不多也不少)连续的空行:
$ printf "%s\n" foo "" bar "" "" baz "" "" "" cow "" "" "" "" moe |
sed '
/^$/{
N;
/^\n$/{
N;
/^\n\n$/{
$ d;
N;
s/\n\n\n\(.\)/\1/
}
}
}'
foo
bar
baz
cow
moe
【讨论】:
它不是 sed,但它比你可以用 sed 做的要短得多:
$ printf 'a\nb\n\nc\n\n\nd\n' |
perl -e 'undef $/; $_ = <>; s/\n\n\n/\n/g; print'
a
b
c
d
【讨论】:
很简单:
sed '1N;N;/^\n\n$/d;P;D'
【讨论】:
如果您允许awk 解决方案,您可以这样做:
awk -v RS='\n\n\n\n' 1 Text.txt
【讨论】: