这个命令可以删除空行:
sed -e '/^$/d' file
但是,如何删除每行非空字符串开头和结尾的空格?
$ sed 's/^ *//; s/ *$//; /^$/d' file.txt
`s/^ *//` => left trim
`s/ *$//` => right trim
`/^$/d` => remove empty line
使用awk更简单的方法。
awk 'NF { $1=$1; print }' file
NF
会选择非空行,并且$1=$1
会去除行首和行尾的空格(并压缩行中间连续的空格)。
sed -r 's/^\s*(.*\S)*\s*$/\1/;/^$/d' file.txt
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
要进行递归替换,您可以使用新的通配符选项(例如**/*.txt
)。
sed -r 's/^\s*//; s/\s*$//; /^$/d'
- kevsed -r "/^\s*\$/d ; s@^\s*(.*)\s*\$@\1@"
- 比sed
更简洁的写法 :) - uzsoltsed -E 's/^ +//; s/ +$//; /^$/d' file.txt
(等效于通用的基于\s
的变体是:sed -E 's/^[[:space:]]+//; s/[[:space:]]+$//; /^$/d' file.txt
。(截至10.8,sed
没有-r
选项;-E
打开扩展正则表达式,支持[[:..:]]
风格的字符类,但显然不支持它们的速记等价物,如\s
。) - mklement0