Answers:
tr
不能做多个字符。使用以下方法之一:
sed
echo "$line" | sed 's/ /\\ /g'
要么
sed 's/ /\\ /g' <<< "$line"
佩尔
echo "$line" | perl -pe 's/ /\\ /g'
要么
perl -pe 's/ /\\ /g'<<< "$line"
Perl也有一个漂亮的函数quotemeta
,可以将字符串中的所有奇数转义:
line='@!#$%^&*() _+"'
perl -ne 'print quotemeta($_)' <<< $line
上面会打印
\@\!\#\$\%\^\&\*\(\)\ _\+\"\
您还可以使用printf
和%q
:
%q quote the argument in a way that can be reused as shell input
所以,你可以做
echo "$line" | printf "%q\n"
请注意,这与Perl一样quotemeta
将转义所有特殊字符,而不仅仅是空格。
printf "%q\n" <<<$line
如果行中有变量,则可以直接在bash中执行:
echo ${line// /\\ }
还有就是AWK
缺少在所有可能的解决方案列表:)
$ echo "Hello World" | awk '{gsub(/ /,"\\ ");print}'
Hello\ World