我在Linux中试过grep -v '^$'
但是没有用。该文件来自Windows文件系统。
答案 0 :(得分:247)
尝试以下方法:
grep -v -e '^$' foo.txt
-e
选项允许使用正则表达式进行匹配。
围绕^$
的单引号使其适用于Cshell。其他炮弹会对单引号或双引号感到满意。
更新:这适用于包含空白行或“全空白”的文件(例如带有“\ r \ n”样式行结尾的窗口行),而上面只删除带有空行和unix样式的文件行尾:
grep -v -e '^[[:space:]]*$' foo.txt
答案 1 :(得分:45)
保持简单。
title = article.title
title = re.sub(r' - Wikipedia, the free encyclopedia','',title)
title_lower = title.lower()
title_lower = title_lower.replace(' ','-')
print title
print title_lower
title_query = ("INSERT INTO myguests "
"(firstname) "
"VALUES (%s)")
cursor.execute("SELECT id FROM myguests "
"WHERE firstname='"+title+"'")
row = cursor.fetchall()
if row !=[]:
print "List is not empty"
if not row:
print "List is empty"
title_query = title
print title
答案 2 :(得分:26)
$ dos2unix file
$ grep -v "^$" file
或者只是简单的awk
awk 'NF' file
如果您没有dos2unix,那么您可以使用tr
等工具tr -d '\r' < "$file" > t ; mv t "$file"
答案 3 :(得分:12)
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
答案 4 :(得分:3)
您可以使用此示例删除空行:
grep . filename.txt
答案 5 :(得分:2)
我更喜欢使用egrep
,虽然在我的测试中使用带有空行的真实文件,但您的方法工作正常(尽管我的测试中没有引号)。这也有效:
egrep -v "^(\r?\n)?$" filename.txt
答案 6 :(得分:2)
如果一行中有多个空白行的序列,并且每个序列只想要一个空行,请尝试
grep -v "unwantedThing" foo.txt | cat -s
cat -s
抑制重复的空输出行。
您的输出将来自
match1
match2
到
match1
match2
原始输出中的三个空白行将被压缩或“挤压”#34;分成一个空白行。
答案 7 :(得分:2)
与上述答案相同
grep -v -e '^$' foo.txt
这里,grep -e表示grep的扩展版本。 '^ $'表示^(行首)和$(行尾)之间没有字符。 '^'和'$'是正则表达式字符。
因此命令grep -v将打印所有与此模式不匹配的行(^和$之间没有字符)。
这样就消除了空白行
答案 8 :(得分:1)
此代码删除空行和以“#”开头的行
grep -v "^#" file.txt | grep -v ^[[:space:]]*$
答案 9 :(得分:1)
努力尝试但这似乎有效(假设\r
在这里咬你)
printf "\r" | egrep -xv "[[:space:]]*"
答案 10 :(得分:0)
这是另一种删除以#符号开头的白线和线条的方法。我认为这对于读取配置文件非常有用。
[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
答案 11 :(得分:0)
使用Perl:
perl -ne 'print if /\S/'
\S
表示匹配非空白字符。
答案 12 :(得分:0)
awk 'NF' file-with-blank-lines > file-with-no-blank-lines
答案 13 :(得分:0)
egrep -v“^ \ s \ s +”
egrep已经做了正则表达式,而\ s是空格。
+重复当前模式。
^是开始
答案 14 :(得分:0)
grep pattern filename.txt | uniq的
答案 15 :(得分:0)
确实可以使用 grep -v -e'^ $',但是不会删除其中有1个或多个空格的空行 。我发现删除空行最简单的答案是使用 awk 。以下是对上述awk家伙的一些修改:
awk 'NF' foo.txt
但是由于这个问题是关于使用grep的,所以我将回答以下问题:
grep -v '^ *$' foo.txt
注意:^和*之间的空格。
或者您可以使用\ s表示空白,如下所示:
grep -v '^\s*$' foo.txt
答案 16 :(得分:0)