代码之家  ›  专栏  ›  技术社区  ›  waqaslam

用ASCII空格替换字符串中的十六进制字符(\x20)

  •  0
  • waqaslam  · 技术社区  · 6 年前

    我正在运行一个shell命令,它返回由ASCII和十六进制字符组合而成的原始字符串。它嵌入的字符是十六进制的空格字符。输出结果如下:

    KINGSTON\x20SV100S2
    ST380011A\x20\x20\x20\x20\x20\x20\x20
    Maxtor\x206L300S0\x20\x20
    

    我怎样才能把所有的 \x20 输入单个ASCII空格字符?

    预期输出:

    KINGSTON SV100S2
    ST380011A
    Maxtor 6L300S0
    

    p.s字符串存储在bash变量中,因此我更喜欢不输入文件的解决方案。

    3 回复  |  直到 6 年前
        1
  •  4
  •   Socowi    6 年前

    只替换 \x20 没有其他用途 sed :

    sed 's/\\x20/ /g' <<< "$output"
    

    yourCommand | sed 's/\\x20/ /g'
    

    要替换所有转义序列,请使用 echo -n (正如克万托已经指出的)或者更好,更轻便 printf %b 也可以直接分配给变量而不使用 $() :

    printf -v output %b "$output"
    
        2
  •  1
  •   kvantour    6 年前

    一个快速的方法是 echo -e

    $ echo -e "KINGSTON\x20SV100S2"
    KINGSTON SV100S2
    

    -e 启用反斜杠转义的解释

    或者只是使用 printf

    $ printf "KINGSTON\x20SV100S2"
    KINGSTON SV100S2
    
        3
  •  1
  •   anubhava    6 年前

    printf echo -e . 你需要使用 %b 格式。 按照 help printf 以下内容:

    %B 在相应参数中展开反斜杠转义序列

    定义实用程序函数:

    expbs() { printf '%b\n' "$@"; }
    

    然后使用它作为:

    expbs 'KINGSTON\x20SV100S2'
    KINGSTON SV100S2
    
    expbs 'ST380011A\x20\x20\x20\x20\x20\x20\x20'
    ST380011A
    
    expbs 'Maxtor\x206L300S0\x20\x20'
    Maxtor 6L300S0