bash中用(下划线)_替换空格的最简单方法[关闭]


91

最近,我不得不编写一个小脚本来解析XenServer中的VM,并且由于VM的名称通常在Windows XP或Windows Server 2008中带有空格,因此我必须修剪这些空格并用下划线_代替。我找到了使用sed进行此操作的简单解决方案,它是处理字符串操作时的绝佳工具。

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

退货

This_is_just_a_test

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


8
问题是?
RageZ

2
嗨,老兄,Stackoverflow是一个问答网站。您提出问题,然后其他人回答,或者您可以回答其他人的问题。如果您想分享自己的知识,则可以提出一个问题,然后自己回答(还留出一些时间让其他人回答)。
mouviciel

2
oups认为我会以这种方式添加此知识,因此将其存储在此处。无论如何,它将回答您自己的问题,就像您下次说的一样:)
flazzarini

Answers:


175

您可以仅使用外壳,而无需trsed

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

5
或所有非ASCII字符字转换为下划线:${str//[^a-zA-Z0-9]/_}; 无论哪种方式,如果您不坚持使用纯粹的POSIX shell,请使用可用的功能。

可能还有合法的标点符号。我们不知道。
ghostdog74

此解决方案正是我在寻找的东西。非常感谢
flazzarini

17

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.