我想从文件中删除所有空行。即使该行包含空格或制表符,也应将其删除。
我想从文件中删除所有空行。即使该行包含空格或制表符,也应将其删除。
Answers:
仅grep
用于非空白:
grep '[^[:blank:]]' < file.in > file.out
[:blank:]
字符范围([...]
)内的POSIX字符类。有一些like [:alpha:]
,[:digit:]
... [:blank:]
匹配水平空白(在POSIX语言环境中,是空格和制表符,但在其他语言环境中则可能更多,例如UTF8语言环境中的所有Unicode水平间距字符),而同时[[:space:]]
匹配水平和垂直白色空格字符(与[:blank:]
诸如垂直制表符,换页符之类的其他内容一样)。
grep '[:blank:]'
都将返回一个包含任何字符的线条,:
,b
,l
,a
,n
或k
。字符类仅在中识别[...]
,并且^
在[...]
集合中取反。因此[^[:blank:]]
表示除空白字符以外的任何字符。
[^[:blank:]]$
只匹配以非空白结尾的行。我们要包含一个非空行的任何地方
grep -E '\S'
都行不通吗?
怎么样:
sed -e 's/^[[:blank:]]*$//' source_file > newfile
要么
sed -e '/^[[:blank:]]*$/d' source_file > newfile
即
对于每一行,替换为:
^
”)[[:blank:]]
”)零次或多次(“ *
”)$
”)有关:: blank ::和其他特殊字符的详细信息,请访问http://www.zytrax.com/tech/web/regex.htm#special
[[:space:]]
包括标签。如果不是这样,则如果制表符后面有空格,则您的正则表达式将失败。
wctype(3)
和isalpha(3)
联机帮助页介绍一下字符类将匹配。
尝试前三通:
ex -s +'v/\S/d' -cwq test.txt
对于多个文件(就地编辑):
ex -s +'bufdo!v/\S/d' -cxa *.txt
注意:该:bufdo
命令不是POSIX。
无需修改文件(只需在标准输出上打印):
cat test.txt | ex -s +'v/\S/d' +%p +q! /dev/stdin
使用以下命令:
grep '\S' FILE
删除所有行,包括空格或制表符。
否则,删除不包括带有空格/制表符的行,请使用:
grep . FILE
例如:
$ printf "line1\n\nline2\n \nline3\n" > FILE
$ cat -v FILE
line1
line2
line3
$ grep '\S' FILE
line1
line2
line3
$ grep . FILE
line1
line2
line3
也可以看看:
sed
:使用sed删除空行awk
:使用awk删除空白行
$
for的行尾吗?