LINUX.ORG.RU
решено ФорумAdmin

Как при помощи sed заменить символ во всём документе?

 ,


0

1

Здравствуйте. Подскажите, пожалуйста, не могу понять как заменить символ ć на с во всём документе.
Вот описание символа https://unicode-table.com/en/0107/
вот так пробовал, не получается:

sed -i 's/\xc407/c/g' file.txt



Последнее исправление: Piter_prbg (всего исправлений: 3)

это двухбайтовый символ, седу его надо скармливать двумя последовательностями:

sed 's/\xc4\x87/c/g' test.txt

Ещё можно использовать номер юникода, но его должен распарсить шелл, а не сед, для этого используется нотация $'string':

sed $'s/\u0107/c/g' test.txt

это всё, конечно, нужно, если есть опасность профукать кодировку по дороге и приходится оставаться в рамках ascii. Так-то вставить символ как есть - проще и понятнее.

legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 1)
Ответ на: комментарий от Piter_prbg

А почему это всё может не работать в случае с икомым символом æ ?
пробовал так:

sed "s|æ|ć|g" 1.txt > 2.txt


И вот так:
sed $'s/\u00E6/ć/g' 1.txt > 2.txt


Ноль эффекта. Хотя другие символы - заменяются.

Piter_prbg
() автор топика
Ответ на: комментарий от legolegs

Ещё можно использовать номер юникода, но его должен распарсить шелл, а не сед, для этого используется нотация $'string':

sed $'s/\u0107/c/g' test.txt

это всё, конечно, нужно, если есть опасность профукать кодировку по дороге

Попробуйте в однобайтной кодировке эту конструкцию. Правильно, и не будет работать. Так что ничем не лучше.

vodz ★★★★★
()
Ответ на: комментарий от Piter_prbg

Возможно, это магия юникода: некоторые символы можно выразить более, чем одним способом и у с в свете одна форма, а в тексте другая. Но конкретно про æ не знаю.

legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 1)
Ответ на: комментарий от vodz

Ну вдруг кто-нибудь пересылает скрипты между юникодными машинами по 7ибитной линии ;)

legolegs ★★★★★
()
Ответ на: комментарий от Piter_prbg

Вот так попробовал, не меняет ничего:

sed 's/\xe6/ć/g' 1.txt > 2.txt

Piter_prbg
() автор топика
Ответ на: комментарий от Piter_prbg

Вы мне ответили, а не legolegs.

В однобайтной кодировке «æ» есть много где в latin-1, например, в windows-1252, но там сходу не нашёл «ć». А про однобайтную кодировку legolegs так пошутил, имея в виду, такую странную ситуацию, когда надо подредактировать ваш вызов sed-а, находясь в семибитном окружении.

vodz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.