【问题标题】:The easiest way to replace white spaces with (underscores) _ in bash [closed]在bash中用(下划线)_替换空格的最简单方法[关闭]
【发布时间】:2010-12-14 22:53:26
【问题描述】:

最近我不得不编写一个小脚本来解析 XenServer 中的 VM,并且由于 VM 的名称在 Windows XP 或 Windows Server 2008 中大多带有空格,因此我不得不修剪这些空格并用下划线替换它们 _ .我找到了一个简单的解决方案,使用 sed 来执行此操作,这在字符串操作方面是一个很好的工具。

echo "This is just a test" | sed -e 's/ /_/g'

返回

This_is_just_a_test

还有其他方法可以做到这一点吗?

【问题讨论】:

  • 问题是?
  • 嗨,latz,Stackoverflow 是一个问答网站。您提出问题,其他人回答它,或者您可以回答其他人的问题。如果您想分享您的知识,您可以提出问题,然后自己回答(留出一些时间让其他人也回答)。
  • oups 认为我会以这种方式添加此知识,因此将其存储在这里。无论如何都会像你说的那样做,回答我自己的问题:)

标签: bash sed


【解决方案1】:

这是边界编程,但请考虑使用tr

$ echo "this is just a test" | tr -s ' ' | tr ' ' '_'

应该这样做。第一次调用压缩了空格,第二次用下划线替换。您可能需要添加制表符和其他空白字符,这仅用于空格。

【讨论】:

    【解决方案2】:

    你可以只使用 shell,不需要trsed

    $ str="This is just a test"
    $ echo ${str// /_}
    This_is_just_a_test
    

    【讨论】:

    • 或者将所有非ASCII字字符转换为下划线:${str//[^a-zA-Z0-9]/_};无论哪种方式,如果您不坚持纯 POSIX shell,请使用您可用的功能。
    • 可能还有合法的标点符号。我们永远不知道。
    猜你喜欢
    • 2013-11-08
    • 1970-01-01
    • 2011-07-12
    • 2021-11-14
    • 2016-04-22
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    相关资源
    最近更新 更多