【问题标题】:How to replace space with \(space) using sed?如何使用 sed 用 \(space) 替换空格?
【发布时间】:2017-01-15 14:45:46
【问题描述】:

当我使用 sed 将所有空格替换为 X 时,该命令有效,该命令为:

sed 's/ /X/g' filelist.tmp

但是,当我尝试用 \space 替换所有出现的空格时,代码是:

sed 's/ /\ /g' filelist.tmp

它不起作用。我究竟做错了什么?请注意,我是 shell 脚本新手。

【问题讨论】:

    标签: bash shell sed


    【解决方案1】:

    添加另一个 \ 即你需要使 \ 文字:

    sed 's/ /\\ /g'
    

    在空格前只有一个\\ 正在转义后面的空格;由于空格不是需要转义的替换特殊字符,因此按原样处理。

    示例:

    % sed 's/ /\\ /g' <<<'foo  bar  spam'
    foo\ \ bar\ \ spam
    

    【讨论】:

    • 试过了。没有发生任何变化。我的代码是:sed "s/ /\\ /g" filelist.tmp。没用!
    • @SomenathSinha 不,像我用过的那样使用单引号,否则你会经历 shell 转义。做:sed 's/ /\\ /g'
    • 成功了!为什么它不能使用双引号?
    • @SomenathSinha 如果使用双引号,shell 会将\`s and will leave a single ` 解释为sed,因此sed 将具有s/ /\ /g,如您现在所见,这将不起作用.
    【解决方案2】:

    你应该使用 -r 参数并且应该修复语法

    sed -r "s/\s/\\\s/g" filelist.tmp
    

    转义“\”的顺序也有错误。

    【讨论】:

      猜你喜欢
      • 2016-08-12
      • 1970-01-01
      • 2019-06-07
      • 2022-01-11
      • 2013-12-28
      • 2014-11-27
      • 2012-08-25
      • 1970-01-01
      • 2010-11-18
      相关资源
      最近更新 更多