用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式,而\是空白的。
+重复当前模式。
^是为了开始