【问题标题】:sed replace with hexsed 用十六进制替换
【发布时间】:2011-07-31 11:11:38
【问题描述】:

UTF-8 文件 test.txt:

AAAAAAAAAAAAAA

十六进制是

41 41 41 41 41 41 41 41 41 41

sed s/A/B/g test.txt 有效

sed s/\x41/B/g test.txt 不起作用

有些字符是不可打印的,所以我必须使用它们的十六进制,A 只是一个例子。

【问题讨论】:

    标签: linux sed grep


    【解决方案1】:

    shell 对其进行预处理,使用单引号。

    sed 's/\x41/B/g' test.txt
    
    echo -e \x41   # x41
    echo -e '\x41' # A
    

    【讨论】:

    • 谢谢! echo -e '\x41' # A 可以,但是 sed 's/\x41/B/g' test.txt 不行。
    • $ echo A | sed 's/\x41/B/g' => B. GNU sed 4.2.1 版
    • 在 mac os x 上似乎是系统特定的
    • BSD sed 似乎不支持十六进制转义码,但应该支持八进制转义码。也许 \101 而不是 \x41 会工作(无法测试自己;macbook 在别处)。
    • @dma_k:你的编码是什么?字节序列必须是别的东西。检查您引用的页面...例如UTF-8 seq是:0xE2 0x80 0x93
    【解决方案2】:

    如果您只想替换单个字符,您应该可以使用带有八进制转义符的 tr,如下所示:

    tr '\101' B
    

    【讨论】:

      猜你喜欢
      • 2011-12-07
      • 2018-06-06
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      • 2011-06-04
      • 2013-05-31
      • 2016-08-07
      • 1970-01-01
      相关资源
      最近更新 更多