使用bash将特殊字符(â)转换为普通字符串

问题描述 投票:0回答:1

我想将以下十六进制字符串转换为普通字符串并替换文件内容中的内联。 hex十六进制字符用于复选框TRUE符号。

enter image description here

Input file:

创建联系人列表L0 |创建联系人列表| C432965(2466ms)

创建联系人1)L0 |创建基本联系人| C679288

Expected file:

创建联系人列表REPLACED L0 |创建联系人列表| C432965(2466ms)

创建联系人1)L0 |创建基本联系人| C679288

Hexdump of sample file:

root@server:/portal# hexdump -C /report.txt

00000000  0a 0a 20 20 43 72 65 61  74 65 20 43 6f 6e 74 61  |..  Create Conta|
00000010  63 74 20 4c 69 73 74 0a  20 20 20 20 e2 88 9a 20  |ct List.    ... |
00000020  4c 30 20 7c 20 43 72 65  61 74 65 20 63 6f 6e 74  |L0 | Create cont|
00000030  61 63 74 20 6c 69 73 74  20 7c 20 43 34 33 32 39  |act list | C4329|
00000040  36 35 20 28 32 34 36 36  6d 73 29 0a 0a 20 20 43  |65 (2466ms)..  C|
00000050  72 65 61 74 65 20 43 6f  6e 74 61 63 74 0a 20 20  |reate Contact.  |
00000060  20 20 31 29 20 4c 30 20  7c 20 43 72 65 61 74 65  |  1) L0 | Create|
00000070  20 62 61 73 69 63 20 63  6f 6e 74 61 63 74 20 7c  | basic contact ||
00000080  20 43 36 37 39 32 38 38  0a 0a                    | C679288..|
0000008a

Tried code:

我可以用变量中的iconv和tr转换这个十六进制字符串但是如何实现相同的替换整个文件重试这样的内容?

echo "√" | iconv -f UTF-8 | tr '√' 'REPLACED' | ed -s /report.txt

sed -i 's/√/REPLACED/g' /report.txt

perl -pi -e 's/√/REPLACED/g' /report.txt

是否有任何解决方案通过sed -i -e直接修改文件以获取此类特殊字符?

bash hex
1个回答
1
投票

e2 88 9a是你的hexdump的重要组成部分。

使用GNU sed:

sed -i 's/\xe2\x88\x9a/REPLACED/' /report.txt
© www.soinside.com 2019 - 2024. All rights reserved.