sed +从solaris系统上的每一行中删除所有前导和尾随空格

时间:2012-05-16 15:32:03

标签: perl sed awk solaris

我有一台Solaris机器(SunOSsu1a 5.10 Generic_142900-15 sun 4vsparcSUNW,Netra-T2000)。

以下sed语法从每行中删除所有前导和尾随空格(我需要删除空格,因为它会导致应用程序出现问题)。

        sed 's/^[ \t]*//;s/[ \t]*$//' orig_file > new_file

但是我注意到sed还从每行的末尾删除了“t”字符。

请告知如何修复sed语法/命令,以便仅从每行中删除前导和尾随空格(解决方案也可以使用Perl或AWK)。

示例(看一下最后一个字符串--set_host)

1)

运行sed命令前的原始行

   pack/configuration/param[14]/action:set_host

另一个例子(在我运行sed之前)

   +/etc/cp/config/Network-Configuration/Network-Configuration.xml:/cp-pack/configuration/param[8]/action:set_host

2)

运行sed命令后的行

   pack/configuration/param[14]/action:set_hos

另一个例子(在我运行sed之后)

   +/etc/cp/config/Network-Configuration/Network-Configuration.xml:/cp-pack/configuration/param[8]/action:set_hos

2 个答案:

答案 0 :(得分:5)

刚发生在我身上你可以使用一个角色类:

sed 's/^[[:space:]]*//;s/[[:space:]]*$//'

这种情况会发生在sed和gnu sed的--posix选项中,因为(显然)posix会将[ \t]解释为空格,\或{{{ 1}}。您可以通过放置文字制表符而不是t来解决此问题,最简单的方法可能是 Ctrl + V 制表符。如果这不起作用,请将模式放在一个文件中(使用文字标签)并使用\t

答案 1 :(得分:0)

正如@aix所指出的那样,问题无疑是sed无法理解\t。虽然GNU sed有,但许多适当的Unix风味却没有。 HP-UX是其中之一,我相信Solaris也是如此。如果你不能安装GNU sed我会看Perl:

perl -pi.old -e 's{^\s+}{};s{\s+$}{}' file

...将修剪一个或多个前导空格(^ \ s +)[空格和/或制表符]以及尾随空格(\ s + $),将文件原位更新,留下备份副本为“file.old” ”