【问题标题】:How do I replace : characters with newline?如何用换行符替换 : 字符?
【发布时间】:2013-05-10 01:13:12
【问题描述】:

我查看了一个非常相似的问题,但无法解决问题Replace comma with newline in sed

我正在尝试将: 字符转换为字符串。这是我尝试过的:

echo -e 'this:is:a:test' | sed "s/\:/'\n'/g"

但这会用 n 代替 :。我也尝试了 tr 但结果相同。我相信管道后看不到 -e ,因此无法识别新行。

感谢任何帮助。

【问题讨论】:

  • 你在什么系统上?您的命令管道在 RHEL 上适用于我
  • GNU sed 似乎将 \n 处理为换行符(在更简单的 sed 's/:/\n/g' 中也是如此;BSD sed 不会。
  • 是的,对我来说仍然有相同的输出:更改为 n。这工作很奇怪 echo -e ${PATH//:/'\n'} 我真的不明白为什么。
  • echo 中不需要 -e,这是为了在 echo 语句的输出中扩展元字符,而不是 sed 的输出。您应该能够在 sed 中包含换行符而无需任何转义或引用:echo 'this:is:a:test' | sed "s/:/\n/g" 应该可以工作。如果没有,请执行 sed --versionecho $SHELL 让我们知道您的环境是什么样的。
  • 嗨 echo $SHELL 给了我 /bin/tcsh。但是 sed --version 或 sed -v 不起作用表示未知标志。我跑了 pkginfo -l SUNWcsu 它说 11.10.0

标签: linux bash unix


【解决方案1】:
echo 'this:is:a:test' | tr : \\n

任何POSIX-compliant tr 都支持\n 转义序列。但是,您需要注意引用或转义转义序列(上面的双反斜杠)。

echo 的 -e 参数对 echo 的参数没有影响。

【讨论】:

  • +1 因为这是最轻量级的解决方案。可能无法跨所有可能的外壳移植。 (我的一个愚蠢的基于busybox的shell本身没有tr命令......)
  • 我希望它工作,但没有运气。 Perl one 工作并创建变量并调用它工作。这可能是我系统的问题。叹息..有没有办法更新我的命令,例如? tr、grep、sed 等...
【解决方案2】:

我假设您已经将字符串放在变量中。这使用参数扩展替换运算符将每个: 替换为换行符,换行符使用$'...' 引用的字符串指定。这两个功能都是 bash 标准的扩展,可能无法在另一个 shell 中工作。

$ foo="this:is:a:test"
$ bar="${foo//:/$'\n'}"
$ echo "$bar"
this
is
a
test

【讨论】:

    【解决方案3】:

    也许 Perl 是一种选择?

    echo -e 'this:is:a:test' | perl -p -e 's/:/\n/g'
    

    【讨论】:

    • 我不是 perl 粉丝,但如果你想要一致的跨平台搜索/替换操作,恕我直言,这不是一个糟糕的方法 :) 尤其是在使用 -i(就地)时标志。
    【解决方案4】:

    您不需要echo -e,因为您在sed 中有\n,而不是在echo 语句中。 因此,以下应该可以工作(请注意,我已将 '\n' 更改为 \n):

    echo -e 'this:is:a:test' | sed "s/\:/\n/g"
    

    echo  'this:is:a:test' | sed "s/\:/\n/g"
    

    另请注意,您不需要转义 :,因此以下内容也可以使用(感谢 @anishsane)

    echo  'this:is:a:test' | sed "s/:/\n/g"
    

    下面只是重申为什么你需要-e 来代替echo

    $ echo -e "hello \n"
    hello
    
    $ echo  "hello \n"
    hello \n
    

    【讨论】:

    • 你不知道,没有它也可以工作......我只是使用发布的代码......将更新答案......谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 2010-09-09
    • 2010-10-11
    相关资源
    最近更新 更多