我有一台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
答案 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” ”