从文本文件中删除空行,从行的开头和结尾删除空格

时间:2011-12-19 14:29:28

标签: bash sed text-files spaces replace

哪一个会更好:

sed -e '/^$/d' *.txt
sed 'g/^$/d' -i *.txt

另外,如何从文本文件中的每一行的开头和结尾删除空格?

4 个答案:

答案 0 :(得分:36)

$ sed 's/^ *//; s/ *$//; /^$/d' file.txt

`s/^ *//`  => left trim
`s/ *$//`  => right trim
`/^$/d`    => remove empty line

答案 1 :(得分:4)

这可能对您有用:

sed -r 's/^\s*(.*\S)*\s*$/\1/;/^$/d' file.txt

答案 2 :(得分:4)

使用awk更简单的方法。

cat filename.txt | awk 'NF' | awk '{$1=$1;print}'

awk 'NF' - 这将删除所有空行/空行。

awk '{$1=$1;print}' - 这将只删除尾随的空格(左右两边)

答案 3 :(得分:2)

类似,但使用ex编辑器:

ex -s +"g/^$/de" +"%s/^\s\+//e" +"%s/\s\+$//e" -cwq foo.txt

对于多个文件:

ex -s +'bufdo!g/^$/de' +'bufdo!%s/^\s\+//e' +'bufdo!%s/\s\+$//e' -cxa *.txt

要递归替换,您可以使用a new globbing option(例如**/*.txt)。