在 Bash 中删除空行并修剪周围的空间
Posted
技术标签:
【中文标题】在 Bash 中删除空行并修剪周围的空间【英文标题】:Delete empty lines and trim surrounding spaces in Bash 【发布时间】:2012-01-23 16:03:16 【问题描述】:此命令删除空行:
sed -e '/^$/d' file
但是,如何从每个非空行的开头和结尾删除空格?
【问题讨论】:
【参考方案1】:$ 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" :)
OS X 用户注意:等价的答案是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
。)
这可以通过这里接受的答案稍微改进:***.com/questions/16414410/…
而不是空格,使用 [[:blank:]] 可能会更好,其中还包括标签【参考方案2】:
这可能对你有用:
sed -r 's/^\s*(.*\S)*\s*$/\1/;/^$/d' file.txt
【讨论】:
【参考方案3】:类似,但使用 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
)。
【讨论】:
【参考方案4】:使用 awk 的更简单的方法。
awk 'NF $1=$1; print ' file
NF
选择非空行,$1=$1
修剪前导和尾随空格(具有挤压行中间的空格序列的副作用)。
【讨论】:
以上是关于在 Bash 中删除空行并修剪周围的空间的主要内容,如果未能解决你的问题,请参考以下文章
如何在 LibreOffice 或 Google 表格中修剪整列的起始空间?