Answers:
请尝试以下操作:
grep -v -e '^$' foo.txt
该-e
选项允许使用正则表达式模式进行匹配。
单引号^$
使它适用于Cshell。其他shell将对单引号或双引号感到满意。
更新:这对我来说适用于具有空行或“所有空白”的文件(例如带有“ \ r \ n”样式行结尾的Windows行),而上述内容仅删除具有空行和Unix样式行结尾的文件:
grep -v -e '^[[:space:]]*$' foo.txt
grep -E -v
,之后的所有内容都将-e
被解释为模式。
grep -v -e '^[[:space:]]*$' -e '^#' file
会在脚本或配置文件(或任何使用井号字符进行注释的文件类型)中为您提供所有非空白,非注释行。
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
要了解有关其工作方式/原因的更多信息,建议阅读正则表达式。http://www.regular-expressions.info/tutorial.html
如果您连续有多个空白行的序列,并且每个序列只想要一个空白行,请尝试
grep -v "unwantedThing" foo.txt | cat -s
cat -s
抑制重复的空输出线。
您的输出将来自
match1
match2
至
match1
match2
原始输出中的三个空白行将被压缩或“压缩”为一个空白行。
与之前的答案相同:
grep -v -e '^$' foo.txt
在这里,grep -e
是指grep的扩展版本。'^ $'表示^(行首)和$(行尾)之间没有任何字符。'^'和'$'是正则表达式字符。
因此,该命令grep -v
将打印所有与此模式不匹配的行(^和$之间没有字符)。
这样,可以消除空白行。
-e
并不意味着“ grep的扩展版本”,也许您感到困惑-E
?该手册明确指出,-e
仅明确指出遵循一种模式。由于该模式并非以破折号开头,并且无论如何您仅定义了一种模式,因此最好将其省略,因为默认情况下,grep希望使用一种正则表达式模式:(grep -v '^$' foo.txt
不需要扩展的正则表达式功能)。还值得一提的是,这并不能消除文件中的空白行,而只能消除通过输出管道传输的空白行。对于这种情况,sed -i
将是正确的工具。
这是去除白线和以#
符号开头的线的另一种方法。我认为这对于读取配置文件非常有用。
[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