【发布时间】:2012-01-23 16:03:16
【问题描述】:
此命令删除空行:
sed -e '/^$/d' file
但是,如何从每个非空行的开头和结尾删除空格?
【问题讨论】:
此命令删除空行:
sed -e '/^$/d' file
但是,如何从每个非空行的开头和结尾删除空格?
【问题讨论】:
$ sed 's/^ *//; s/ *$//; /^$/d' file.txt
`s/^ *//` => left trim
`s/ *$//` => right trim
`/^$/d` => remove empty line
【讨论】:
sed -r 's/^\s*//; s/\s*$//; /^$/d'
sed -r "/^\s*\$/d ; s@^\s*(.*)\s*\$@\1@" - less sed-"calling" :)
sed -E 's/^ +//; s/ +$//; /^$/d' file.txt(等价于广义的、基于\s 的变体是:sed -E 's/^[[:space:]]+//; s/[[:space:]]+$//; /^$/d' file.txt。(@ 没有-r 选项OS X 上的 987654330@(截至 10.8);-E 打开扩展正则表达式,支持[[:..:]] 样式的字符类,但显然不支持它们的速记等效项,例如\s。)
这可能对你有用:
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
要递归替换,可以使用a new globbing option(例如**/*.txt)。
【讨论】:
使用 awk 的更简单的方法。
awk 'NF { $1=$1; print }' file
NF 选择非空行,$1=$1 修剪前导和尾随空格(具有挤压行中间的空格序列的副作用)。
【讨论】: