在bash中用最简单的方法将空格替换为下划线_

104

最近我需要编写一个小脚本来解析 XenServer 中的虚拟机,由于虚拟机的名称通常包含空格,例如 Windows XP 或 Windows Server 2008,因此我需要去除这些空格并将它们替换为下划线 _ 。我发现使用 sed 是一个简单的解决方案,当涉及到字符串操作时它是一个很棒的工具。

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

返回值

This_is_just_a_test

还有其他实现这个功能的方法吗?


8
问题是什么? - RageZ
2
嗨latz,Stackoverflow是一个问题和答案网站。你可以提问,别人回答,或者你可以回答别人的问题。如果你想分享你的知识,你可以先提出一个问题,然后自己回答它(在给别人留时间回答之后)。 - mouviciel
2
哎呀,我本来想把这个知识点加进来,这样就可以在这里存储了。不过下次我会按照你说的方式回答自己的问题的 :) - flazzarini
2个回答

198

你可以仅使用shell命令来做到,不需要使用trsed

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

5
将所有非ASCII字符替换为下划线:${str//[^a-zA-Z0-9]/_};无论哪种方式,如果你不坚持使用纯POSIX shell,则应使用可用的功能。 - guns
可能会有一些合法的标点符号,我们永远不知道。 - ghostdog74

21
这是边缘编程,但是请看一下使用 tr
$ echo "this is just a test" | tr -s ' ' | tr ' ' '_'

应该这样做。第一次调用将空格压缩,第二次替换为下划线。您可能还需要添加制表符和其他空格字符,这只是针对空格的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接