如何在所有空格前添加反斜杠?

如何在所有空格前添加反斜杠?

我怎样才能在每个空格前加上反斜杠,最好使用trsed命令?

这是我的脚本:

#!/bin/bash
line="hello bye"
echo $line | tr ' ' "\\\ "

这应该用反斜杠后跟空格来替换空格,但它只是用反斜杠替换空格,而不是用反斜杠+空格来替换空格。

这是我得到的输出:

hello\bye

预期输出:

hello\ bye

答案1

tr无法使用多个字符。请使用下列字符之一:

  1. sed

    echo "$line" | sed 's/ /\\ /g' 
    

    或者

    sed 's/ /\\ /g' <<< "$line"
    
  2. Perl

    echo "$line" | perl -pe 's/ /\\ /g'  
    

    或者

    perl -pe 's/ /\\ /g'<<< "$line"
    

    Perl 还有一个漂亮的函数,quotemeta可以转义字符串中所有奇怪的内容:

    line='@!#$%^&*() _+"'
    perl -ne 'print quotemeta($_)' <<< $line
    

    以上内容将打印

    \@\!\#\$\%\^\&\*\(\)\ _\+\"\
    
  3. 您还可以使用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
    
  4. 如果变量中有此行,则可直接在 bash 中执行此操作:

    echo ${line// /\\ }
    

答案2

AWK所有可能的解决方案的列表中缺少:)

$ echo "Hello World" | awk '{gsub(/ /,"\\ ");print}'                                                                             
Hello\ World

相关内容