Risposte:
Basta usare quella sintassi:
sed 's/馑//g' file1
O nella forma di escape:
sed "s/$(echo -ne '\u9991')//g" file1
(Nota che le versioni precedenti di Bash e alcune shell non capiscono echo -e '\u9991'
, quindi controlla prima.)
sed
ha il modificatore g, sostituisce tutte le occorrenze anche quando si susseguono. Anche sed dovrebbe contarlo come un personaggio, vedi: echo -ne "馑" | wc -m
dà 1
. Se si contano i byte ( wc -c
) ritornerebbe 3
. Ho capito bene la tua domanda?
.
significa "un carattere" o "un byte"?
echo 馑 | sed s/...//
mi dà 馑
(niente viene sostituito)
en_US.UTF-8
, ma non sotto C
.
Perl può farlo:
echo 汉典“馑”字的基本解释 | perl -CS -pe 's/\N{U+9991}/Jin/g'
-CS
attiva UTF-8 per input, output ed errori standard.
Diverse versioni del sed
supporto Unicode :
Non sono riuscito a trovare informazioni su BSD sed, che ho pensato fosse strano, ma penso che le probabilità siano buone che supporti anche Unicode. Sfortunatamente, non esiste un modo standard per dire sed
quale codifica usare, quindi ognuno lo fa a modo suo.
Questo funziona per me:
$ vim -nEs +'%s/\%u9991//g' +wq file1
È una goccia più prolissa di quanto vorrei; ecco una spiegazione completa:
-n
disabilita il file di scambio vim-E
Ex modalità migliorata-s
modalità silenziosa+'%s/\%u9991//g'
eseguire il comando di sostituzione+wq
salva ed escifile1
sul posto , è corretto?
Con le versioni recenti di BASH, ometti le virgolette intorno all'espressione sed e puoi usare le stringhe con escape di BASH. Gli spazi all'interno dell'espressione sed o parti dell'espressione sed che potrebbero essere interpretati da BASH come caratteri jolly possono essere citati individualmente.
$ echo "饥馑荐臻" | sed s/$'\u9991'//g
饥荐臻
echo 馑 | sed s/...//
stampa qualcosa?