用grep删除空行

我在Linux中尝试了grep -v '^$' ,但没有成功。 这个文件来自Windows文件系统。

尝试以下操作:

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

-e选项允许正则expression式匹配。

^$的单引号使它适用于Cshell。 其他炮弹将会满意单引号或双引号。

更新:这适用于空白行或“所有空白”的文件(例如带有\ r \ n样式行结尾的窗口行),而上述仅删除空白行和unix样式行结尾的文件:

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

或者只是awk

 awk 'NF' file 

如果你没有dos2unix,那么你可以使用像tr这样的工具

 tr -d '\r' < "$file" > t ; mv t "$file" 

把事情简单化。

 grep . filename.txt 
 grep -v "^[[:space:]]*$" The -v makes it print lines that do not completely match ===Each part explained=== ^ match start of line [[:space:]] match whitespace- spaces, tabs, carriage returns, etc. * previous match (whitespace) may exist from 0 to infinite times $ match end of line 

运行代码 –

 $ echo " > hello > > ok" | > grep -v "^[[:space:]]*$" hello ok 

为了更多地了解这个如何/为什么这个工作,我build议阅读正则expression式。 http://www.regular-expressions.info/tutorial.html

你可以用这个例子删除空行:

 grep . filename.txt 

我更喜欢使用egrep ,虽然在我的testing中使用空行的真正文件,但是您的方法工作正常(虽然在我的testing中没有引号)。 这也工作:

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

试图努力,但这似乎工作(假设\r在这里咬你)

 printf "\r" | egrep -xv "[[:space:]]*" 

和上面的答案一样

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

这里,grep -e表示grep的扩展版本。 '^ $'表示在^(行首)和$(行尾)之间没有字符。 '^'和'$'是正则expression式字符。

因此,命令grep -v将打印所有不符合此模式的行(^和$之间没有字符)。

这样,空的空白行被消除

如果在一行中有多个空白行的序列,并且每个序列只想要一个空白行,请尝试

 grep -v "unwantedThing" foo.txt | cat -s 

cat -s抑制重复的空输出行。

你的输出将从

 match1 match2 

 match1 match2 

原始输出中的三个空白行将被压缩或“压缩”成一个空白行。

grep模式filename.txt | uniq的

 awk 'NF' file-with-blank-lines > file-with-no-blank-lines 

使用Perl:

 perl -ne 'print if /\S/' 

\S表示匹配非空白字符。

这里是删除以#号开头的白线和线的另一种方法。 我认为这对读取configuration文件非常有用。

 [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 

egrep -v“^ \ s \ s +”

egrep已经做了正则expression式,而\是空白的。

+重复当前模式。

^是为了开始