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

fla*_*ini 85 bash sed

最近我不得不编写一个在XenServer中解析虚拟机的小脚本,因为虚拟机的名称主要是在Windows XP或Windows Server 2008中使用空格,我不得不修剪这些空格并用下划线替换它们_.我找到了一个简单的解决方案,使用sed这是一个很好的工具,当涉及到字符串操作.

echo "This is just a test" | sed -e 's/ /_/g'
Run Code Online (Sandbox Code Playgroud)

回报

This_is_just_a_test
Run Code Online (Sandbox Code Playgroud)

gho*_*g74 164

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

$ str="This is just a test"
$ echo ${str// /_}
This_is_just_a_test
Run Code Online (Sandbox Code Playgroud)

  • 或者将所有非ASCII字符转换为下划线:`$ {str // [^ a-zA-Z0-9]/_}`; 无论哪种方式,如果你不坚持纯POSIX shell,那么使用你可用的功能. (5认同)
  • 非常感激 (2认同)

unw*_*ind 15

这是边界编程,但请看使用tr:

$ echo "this is just a test" | tr -s ' ' | tr ' ' '_'
Run Code Online (Sandbox Code Playgroud)

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