使用sed删除文本文件中的所有前导/后续空格

时间:2009-10-20 08:06:51

标签: linux unix text sed

File1中:

  hello  
  world  

如何使用sed删除此文件中的前导/尾随空格 - 使用一个命令(无中间文件)

我现在有:

sed -e 's/^[ \t]*//' a > b

领先的空间。

sed 's/ *$//' b > c

这是尾随空格。

4 个答案:

答案 0 :(得分:13)

你几乎得到了它:

sed -e 's/^[ \t]*//;s/[ \t]*$//' a > c

此外,在sed的某些版本中,还有一个内联编辑选项:

sed -i -e 's/^[ \t]*//;s/[ \t]*$//' a

答案 1 :(得分:7)

更简单的方法,使用awk

awk '{$1=$1}1' file

awk '{gsub(/^ +|  +$/,"")}1' file

答案 2 :(得分:3)

perl -lape 's/^\s+|\s+$//g'

老实说,我知道perl regexps最好,所以我发现perl -lapesed -e更容易使用。

另外,要回答原始问题,您可以让sed执行多个这样的操作:

sed -e 's/something/something else/' -e 's/another substitution/another replacement/'

显然你也可以将两个替换放在一个字符串中并用分号分隔,如另一个答案所示。

答案 3 :(得分:0)

请注意,在不使用中间文件的情况下将一行中的多个过滤器连续应用于输入文件的更一般情况下,解决方案是使用管道:

sed -e 's/^[ \t]*//' a | sed -e 's/ *$//' > c

显然这里不需要它们,因为一次调用sed就足够了,但如果第二个sed命令不同,比如uniq或sort,那么这个模式就是正确的。