Преобразуйте специальный символ (âš) в обычную строку, используя bash - PullRequest
0 голосов
/ 31 марта 2019

Я хотел бы преобразовать следующую шестнадцатеричную строку в обычную строку и заменить inline в содержимом файла. шестнадцатеричный символ для флажка ИСТИНА.

enter image description here

Входной файл:

Создать список контактов L0 | Создать список контактов | C432965 (2466 мс)

Создать контакт 1) L0 | Создать основной контакт | C679288

Ожидаемый файл:

Создать список контактов ЗАМЕНЕНО L0 | Создать список контактов | C432965 (2466 мс)

Создать контакт 1) L0 | Создать основной контакт | C679288

Hexdump файла примера:

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

Пробный код:

Я могу преобразовать эту шестнадцатеричную строку с помощью 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, чтобы изменить файл напрямую для такого специального символа?

1 Ответ

1 голос
/ 02 апреля 2019

e2 88 9a является важной частью вашего hexdump.

С GNU sed:

sed -i 's/\xe2\x88\x9a/REPLACED/' /report.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...