【问题标题】:sed + removes all leading and trailing whitespace from each line on solaris systemsed + 删除 solaris 系统上每一行的所有前导和尾随空格
【发布时间】: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 的版本 - 根据我的经验,BSDGNU 版本在语法方面存在差异。我不确定 Solaris 使用什么,但您可以检查是否有 GNU sed 可供您使用(可能是 gsed)。
  • 可能 sed 无法识别制表符 \t(你也会在开头丢失 t 字符。如果您的系统支持 \s,请尝试 s/^\s*\(.*\)\s*$/\1/
  • 您的sed 不支持\t 似乎很明显,因此它将t 视为字符类的一部分。

标签: perl sed awk solaris


【解决方案1】:

我突然想到你可以使用一个字符类:

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

这发生在您的sed 和带有--posix 选项的gnu sed 中,因为(显然)posix 将[ \t] 解释为空格、\t。您可以通过放置文字选项卡而不是 \t 来解决此问题,最简单的方法可能是 Ctrl+V Tab。如果这不起作用,请将模式放入文件中(使用文字标签)并使用sed -f patterns.sed oldfile > newfile

【讨论】:

  • 请给我一个关于更新 sed 命令的例子(在 sed 语法中需要修复什么?)
  • 语法是一样的,只是不用输入\t,而是输入ctrl-v,后跟tab键。
  • 完美!这在 FreeBSD 9.1-RELEASE 上对我有用。谢谢!
【解决方案2】:

正如@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 ”。

【讨论】:

    猜你喜欢
    • 2013-09-23
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    相关资源
    最近更新 更多