【发布时间】:2012-05-24 05:02:11
【问题描述】:
我有一台 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
【问题讨论】:
-
在 OS X 上使用
GNU sed对我来说效果很好:echo ' set_host ' | gsed 's/^[ \t]*//;s/[ \t]*$//' > newfile ; cat -e newfile提供set_host$(删除空格,保留t)。 -
你是在solaris机器上运行的吗? (反正我的solaris机器上没有gsed)
-
不,那是在 OS X 上。您可以检查您正在使用的
sed的版本 - 根据我的经验,BSD和GNU版本在语法方面存在差异。我不确定 Solaris 使用什么,但您可以检查是否有GNU sed可供您使用(可能是gsed)。 -
可能 sed 无法识别制表符
\t(你也会在开头丢失 t 字符。如果您的系统支持\s,请尝试s/^\s*\(.*\)\s*$/\1/ -
您的
sed不支持\t似乎很明显,因此它将t视为字符类的一部分。