在 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 表格中修剪整列的起始空间?

删除图像视图周围的空白

如何删除正文周围的边距空间或清除默认 CSS 样式

Bash之定时备份归档检验并删除

通过 Bash 从文本文件中删除空行,包括空格字符 [重复]

如何避免在 div 上应用的背景颜色周围出现空间? [关闭]