Например:
sed 's/\u0091//g' file1
Прямо сейчас я должен сделать, hexdump
чтобы получить шестнадцатеричное число и поместить в sed
следующее:
$ echo -ne '\u9991' | hexdump -C
00000000 e9 a6 91 |...|
00000003
А потом:
$ sed 's/\xe9\xa6\x91//g' file1
echo 馑 | sed s/...//
печатает что-нибудь?sed
имеет модификатор g, он заменяет все вхождения, даже когда они следуют друг за другом. Также sed должен считать это как один символ, см .:echo -ne "馑" | wc -m
дает1
. Если вы посчитаете bytes (wc -c
), он вернется3
. Правильно ли я понял ваш вопрос?.
означает «один символ» или «один байт»?echo 馑 | sed s/...//
дает мне馑
(ничто не заменяется)en_US.UTF-8
, но не подC
.Perl может сделать это:
-CS
включает UTF-8 для стандартного ввода, вывода и ошибки.источник
Ряд версий
sed
поддержки Unicode :Я не смог найти информацию о BSD sed, что мне показалось странным, но я думаю, что есть хорошие шансы, что он также поддерживает Unicode. К сожалению, не существует стандартного способа определить,
sed
какую кодировку использовать, поэтому каждый делает это по-своему.источник
Это работает для меня:
Это капля более многословная, чем мне бы хотелось; вот полное объяснение:
-n
отключить файл подкачки vim-E
Ex улучшенный режим-s
бесшумный режим+'%s/\%u9991//g'
выполнить команду замещения+wq
Сохранить и выйтиисточник
file1
на месте , это правильно?В последних версиях BASH просто опускайте кавычки вокруг выражения sed, и вы можете использовать экранированные строки BASH. Пробелы в выражении sed или части выражения sed, которые могут быть интерпретированы BASH как символы подстановки, могут быть указаны в кавычках.
источник
У меня работает с GNU sed (версия 4.2.1):
(В качестве другой замены
sed
вы также можете использовать GNUawk
; но это не кажется необходимым.)источник