用grep删除空行

时间:2010-08-08 00:10:51

标签: text terminal grep newline

我在Linux中试过grep -v '^$'但是没有用。该文件来自Windows文件系统。

17 个答案:

答案 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)

文件中的行是否包含空格字符?

如果是这样

grep "\S" file.txt

否则

grep . file.txt

答案来自: https://serverfault.com/a/688789