我在Linux中尝试了grep -v '^$'
,但没有成功。该文件来自Windows文件系统。使用grep删除空行
回答
尝试以下操作:
grep -v -e '^$' foo.txt
的-e
选项允许正则表达式模式的匹配。
围绕^$
的单引号使它适用于Cshell。其他shell将会对单引号或双引号感到满意。
更新:这适用于空白行或“所有空白区域”的文件(例如带有\ r \ n样式行结尾的窗口行),而上述仅删除空白行和unix文件样式行结尾:
grep -v -e '^[[:space:]]*$' foo.txt
我喜欢用egrep
,尽管我用空行真正的文件测试你的方法工作的罚款(虽然没有在我的测试带引号)。这工作太:
egrep -v "^(\r?\n)?$" filename.txt
试过了。空行仍在显示。这可能是因为该文件是在Windows中创建的? – 2010-08-08 00:25:36
拼命,但这似乎工作(假设\r
这里咬你)
printf "\r" | egrep -xv "[[:space:]]*"
如果我用文件中的输出替换第一部分,那么这起作用。 – 2010-08-08 01:38:50
$ dos2unix file
$ grep -v "^$" file
或者只是在awk
awk 'NF' file
如果你不没有dos2unix,那么你可以使用像tr
tr -d '\r' < "$file" > t ; mv t "$file"
找不到程序dos2unix。这是Windows吗? ask命令也不起作用。 – 2010-08-08 01:36:43
问?不,这是'awk'。 – iconoclast 2014-10-03 18:19:28
转换为UNIX样式行结束符的好处否则正则表达式可能无法按预期工作。直到我转换行结束为止,这里没有任何工作。 – 2016-08-31 14:41:51
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 pattern filename.txt | uniq的
'uniq'会将相邻的空白行减少到一个空行,但不会完全删除它们。不过,我喜欢尝试像那样使用'uniq'。首先排序会有效地删除所有空白行 - 只留下一行,但重新排列行顺序可能不可接受。 – 2013-01-16 02:43:08
好点。这也将重复线条。我想我的解决方案引入了错误。 – baitisj 2013-01-17 05:57:08
awk 'NF' file-with-blank-lines > file-with-no-blank-lines
使用Perl:
perl -ne 'print if /\S/'
\S
意味着匹配非空白字符。
这里是删除以#号开头的白线和线的另一种方式。我认为这对读取配置文件非常有用。
[[email protected] ~]# 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 -e '^$' foo.txt
这里,grep的-e装置的grep扩展版本。 '^ $'表示在^(行首)和$(行尾)之间没有字符。 '^'和'$'是正则表达式字符。
因此,命令grep -v将打印所有不符合此模式的行(^和$之间无字符)。
这种方式空的空行被消除
保持简单。
grep . filename.txt
这给了我文件中的所有行 – 2017-01-24 06:11:51
@LưuVĩnhPhúc它应该输出文件中除空行外的所有行。 – 2017-02-19 23:33:24
这适用于我基于Linux系统的文件,但不适用于Windows的文件。大概是因为Windows行尾字符。 – ocertat 2018-02-09 15:07:21
如果你有一排多个空行的序列,并希望每个序列只有一个空行,尽量
grep -v "unwantedThing" foo.txt | cat -s
cat -s
抑制了重复空输出线。
你的输出会去从
match1
match2
到
match1
match2
在原始输出三个空行会被压缩或“挤压”到一个空行。
的egrep -v “^ \ S \ S +”
egrep的已经做正则表达式,而\ s是空白。
+重复当前模式。
的^是开始
您可以删除这个例子空行:
grep . filename.txt
- 1. linux grep/sed某些行 - 空间删除
- 2. 删除使用宏空行,行X
- 3. 删除空行
- 4. 删除空行
- 5. 删除空行
- 6. 空行/删除
- 7. 删除空行
- 8. 删除空行
- 9. 删除由变量内部的grep创建的空行吗?
- 10. 删除Excel中的空行使用VBA
- 11. 使用Excel Interop删除空行
- 12. 使用java代码删除空白行
- 13. 使用空列值删除行
- 14. 使用jQuery从textarea中删除空行
- 15. 使用VBA删除空行 - MS Excel
- 16. 删除行号从选项的grep
- 17. R-grep删除UPPER个案行
- 18. Grep删除是sem-similar的行吗?
- 19. 从.txt删除或添加行,使用grep或sed
- 20. 使用grep从文本文件中删除多行
- 21. 使用AWK删除特定行[或sed,grep,whatever]
- 22. Notepad ++空行删除
- 23. Excel删除空行
- 24. TableLayoutPanel删除空行
- 25. Excel VBA删除后删除空白行
- 26. 使用javascript删除空格
- 27. 使用PIG删除空格
- 28. 使用.Split删除空项
- 29. grep的删除head标签
- 30. 使用clearfix删除空白空间:
它仍然显示空行。 – 2010-08-08 00:24:33
查看问题的更新。 – ars 2010-08-08 00:52:39
是的,这是有效的。它也适用于grep。 – 2010-08-08 01:15:20