为什么sed / ^ $ / d只删除空行但/ ^ $ / p会打印所有行?

时间:2011-11-11 13:52:11

标签: regex sed

我可以使用sed /^$/d <file>删除文件中的所有空白行,但是如果我只想打印所有空白行怎么办?命令sed /^$/p <file>打印文件中的所有行。

我想这样做的原因是我们使用EDA程序(Expedition),它使用正则表达式来运行网络名称的规则。我正试图找到一种方法来搜索没有分配名称的所有网络。我认为使用^$会起作用,但它最终会找到所有网络,这也是/^$/p正在做的事情。那么有不同的方法吗?

4 个答案:

答案 0 :(得分:18)

除非另有说明,sed将在完成处理后打印图案空间。如果仔细查看输出,您会发现文件中的每一行都有2个空白行。您必须使用-n命令行开关来停止打印sed。

sed -n /^$/p infile

应该按你的意愿工作。

答案 1 :(得分:2)

默认情况下,sed打印每一行,因此p标志是无用的。为了使它有用,你需要给sed -n开关。实际上,以下似乎可以满足您的需求:

sed -n /^$/p

答案 2 :(得分:1)

您也可以将grep用作:

grep '^$' infile

答案 3 :(得分:1)

以另一种方式思考,不要 p ,但!d

你可以试试:

sed '/^$/!d' yourFile