我在Linux中尝试了grep -v '^$',但没有工作。该文件来自Windows文件系统。


当前回答

Use:

grep pattern filename.txt | uniq

其他回答

我更喜欢使用egrep,尽管在我的测试中,您的方法工作得很好(尽管在我的测试中没有引号)。这个方法也奏效了:

egrep -v "^(\r?\n)?$" filename.txt

试试下面的方法:

grep -v -e '^$' foo.txt

e选项允许正则表达式模式进行匹配。

^$周围的单引号使它适用于shell。其他shell只接受单引号或双引号。

更新:这适用于一个有空行或“全空白”的文件(如windows行带\r\n样式的行结束符),而上面只删除有空行和unix样式行结束符的文件:

grep -v -e '^[[:space:]]*$' foo.txt

下面是删除白色线条和以#符号开始的线条的另一种方法。我认为这对于读取配置文件非常有用。

[root@localhost ~]# cat /etc/sudoers | egrep -v '^(#|$)'
Defaults    requiretty
Defaults   !visiblepw
Defaults    always_set_home
Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR
LS_COLORS"
root    ALL=(ALL)       ALL
%wheel  ALL=(ALL)       ALL
stack ALL=(ALL) NOPASSWD: ALL

保持简单。

grep . filename.txt

的确,使用grep -v -e '^$'可以工作,但是它不能删除有1个或多个空格的空行。我发现删除空行最简单的答案是使用awk。下面是对上面awk的修改:

awk 'NF' foo.txt

但由于这个问题是为了使用grep,我将回答以下问题:

grep -v '^ *$' foo.txt

注意:^和*之间有空格。

或者你可以用\s来表示空格,就像这样:

grep -v '^\s*$' foo.txt