Na przykład:
sed 's/\u0091//g' file1
W tej chwili muszę zrobić, hexdump
aby uzyskać numer szesnastkowy i wpisać w sed
następujący sposób:
$ echo -ne '\u9991' | hexdump -C
00000000 e9 a6 91 |...|
00000003
I wtedy:
$ sed 's/\xe9\xa6\x91//g' file1
echo 馑 | sed s/...//
coś drukuje?sed
ma modyfikator g, zastępuje wszystkie wystąpienia również wtedy, gdy podążają one za sobą. Również sed powinien liczyć się jako jedna postać, patrz:echo -ne "馑" | wc -m
daje1
. Jeśli policzysz bajty (wc -c
), to zwróci3
. Czy dobrze zrozumiałem twoje pytanie?.
oznacza „jeden znak” czy „jeden bajt”?echo 馑 | sed s/...//
daje mi馑
(nic nie jest zamieniane)en_US.UTF-8
, ale nie działaC
.Perl może to zrobić:
-CS
włącza UTF-8 dla standardowego wejścia, wyjścia i błędu.źródło
Wiele wersji
sed
obsługi Unicode :Nie mogłem znaleźć informacji na temat BSD sed, co moim zdaniem było dziwne, ale myślę, że szanse są duże, że obsługuje także Unicode. Niestety nie ma standardowego sposobu na określenie,
sed
którego kodowania użyć, więc każdy robi to na swój własny sposób.źródło
To działa dla mnie:
To kropla bardziej gadatliwa, niż bym chciał; oto pełne wyjaśnienie:
-n
wyłącz plik wymiany vim-E
Ex ulepszony tryb-s
tryb cichy+'%s/\%u9991//g'
wykonać polecenie podstawienia+wq
Zapisz i wyjdźźródło
file1
na miejscu , czy to prawda?W najnowszych wersjach BASH po prostu pomiń cudzysłowy wokół wyrażenia sed i możesz użyć znaków ucieczki BASH. Odstępy w obrębie wyrażenia sed lub części wyrażenia sed, które mogą być interpretowane przez BASH jako znaki wieloznaczne, które można indywidualnie cytować.
źródło
Działa dla mnie z GNU sed (wersja 4.2.1):
(Jako kolejny zamiennik
sed
możesz również użyć GNUawk
; ale nie wydaje się to konieczne).źródło