用下划线替换所有非字母数字

Ale*_*lls 3 shell bash

我有这个:

second_arg="${second_arg/[^[:alnum:]]/_}"
Run Code Online (Sandbox Code Playgroud)

如果我这样做:

second_arg="foo::"
second_arg="${second_arg/[^[:alnum:]]/_}"
echo "$second_arg"
Run Code Online (Sandbox Code Playgroud)

然后我得到:

foo_:
Run Code Online (Sandbox Code Playgroud)

如何替换所有非字母数字实例?我尝试了这样的全局开关:

 second_arg="${second_arg/[^[:alnum:]]/_/g}"
Run Code Online (Sandbox Code Playgroud)

但这不起作用,我最终得到:

foo_:/g
Run Code Online (Sandbox Code Playgroud)

Jef*_*ler 9

或者,如果您想坚持使用 bash 的变量扩展功能,请使用两个正斜杠来替换每个匹配项:

second_arg="${second_arg//[^[:alnum:]]/_}"
                         ^------ here
Run Code Online (Sandbox Code Playgroud)


Dop*_*oti 5

sed

$ echo 'This is a test; specifically it is test number 25!' | sed 's/[^a-zA-Z0-9]/_/g'
This_is_a_test__specifically_it_is_test_number_25_
Run Code Online (Sandbox Code Playgroud)