我在 Linux 中尝试了
grep -v '^$'
,但没有成功。该文件来自 Windows 文件系统。
尝试以下操作:
grep -v -e '^$' foo.txt
-e
选项允许使用正则表达式模式进行匹配。
^$
周围的单引号使其适用于 Cshell。其他 shell 会很乐意使用单引号或双引号。
更新:这对我来说适用于带有空白行或“全空白”的文件(例如带有
\r\n
样式行结尾的 Windows 行),而上面的内容仅删除带有空白行和 unix 样式行结尾的文件:
grep -v -e '^[[:space:]]*$' foo.txt
保持简单。
grep . filename.txt
用途:
$ dos2unix file
$ grep -v "^$" file
或者只是简单的 awk:
awk 'NF' file
如果你没有dos2unix,那么你可以使用像tr这样的工具:
tr -d '\r' < "$file" > t ; mv t "$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
将打印所有与此模式不匹配的行(^和$之间没有字符)。
这样,空的空白行就被消除了。
我更喜欢使用
egrep
,尽管在我使用带有空行的真实文件的测试中,你的方法工作得很好(尽管在我的测试中没有引号)。这也有效:
egrep -v "^(\r?\n)?$" filename.txt
此代码删除空白行和以“#”开头的行
grep -v "^#" file.txt | grep -v ^[[:space:]]*$
awk 'NF' file-with-blank-lines > file-with-no-blank-lines
使用 grep -v -e '^$' 确实可以工作,但是它不会删除其中有 1 个或多个空格的空白行。我发现删除空白行最简单的答案是使用 awk。以下是上面 awk 人员的一点修改:
awk 'NF' foo.txt
但是由于这个问题是关于使用 grep 的,所以我将回答以下问题:
grep -v '^ *$' foo.txt
注意:^和*之间的空格。
或者你可以使用 \s 来表示空格,如下所示:
grep -v '^\s*$' foo.txt
我努力尝试,但这似乎有效(假设
\r
在这里咬你):
printf "\r" | egrep -xv "[[:space:]]*"
使用 Perl:
perl -ne 'print if /\S/'
\S
表示匹配非空白字符。
egrep -v "^\s\s+"
egrep 已经做了正则表达式,并且 \s 是空格。
+ 复制当前模式。
^代表开始
用途:
grep pattern filename.txt | uniq
这是删除白线和以
#
符号开头的线条的另一种方法。我认为这对于读取配置文件非常有用。
[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 -v '^$' folderlist.txt
文件夹列表.txt
folder1/test
folder2
folder3
folder4/backup
folder5/backup
结果将是:
folder1/test
folder2
folder3
folder4/backup
folder5/backup
您可以:
(1) 仅显示非空行:
grep .
或
grep '\S'
或
grep '[[:graph:]]'
(2) 隐藏空行:
grep -v '^$'
或
grep -v '^[[:space:]]*$'
.
= 除换行符之外的任何字符'\S'
= 模式,其中 \S
代表不是空白字符(请阅读更多内容pcre2syntax - Perl 兼容的正则表达式)'[[:graph:]]'
=模式,其中[[:xxxxx:]]
代表正POSIX命名集,graph
代表pcre2syntax的字符类“打印,不包括空格”-v
= 反转匹配的意义,以选择不匹配的行(阅读更多关于 grep Matching Control 选项)'^$'
=模式,其中^
代表行的开头,$
代表行的结尾(等于空行)'^[[:space:]]*$'
= 模式,其中 ^
代表行的开头,[[:xxxxx:]]
代表 POSIX 命名集,space
代表字符类“空白”,*
代表零次或多次出现,$
代表行尾线在某些版本的 grep 上,您可能还必须使用此选项:
-E
= extended-regexp - 将模式解释为扩展正则表达式