Yanıtlar:
Sadece bu sözdizimini kullanın:
sed 's/馑//g' file1
Veya kaçan formda:
sed "s/$(echo -ne '\u9991')//g" file1
(Bash'in eski sürümlerinin ve bazı mermilerin anlamadığını unutmayın echo -e '\u9991'
, bu nedenle önce kontrol edin.)
sed
g değiştiricisine sahip olduğundan, birbirlerini takip ettiklerinde de tüm olayların yerini alır. Ayrıca sed onu bir karakter olarak saymalı, bakınız: echo -ne "馑" | wc -m
verir 1
. Baytları ( wc -c
) sayarsanız geri dönecektir 3
. Sorunuzu doğru anladım mı?
.
"bir karakter" veya "bir bayt" anlamına mı geliyor?
echo 馑 | sed s/...//
, o yüzden bana veriyor 馑
(hiçbir şey değiştirilmez)
en_US.UTF-8
değildir C
.
Perl bunu yapabilir:
echo 汉典“馑”字的基本解释 | perl -CS -pe 's/\N{U+9991}/Jin/g'
-CS
standart girdi, çıktı ve hata için UTF-8'i açar.
sed
Unicode desteğinin bir dizi sürümü :
Garip olduğunu düşündüğüm BSD sed hakkında bilgi bulamadım, ancak Unicode'u da destekleme ihtimalinin iyi olduğunu düşünüyorum. Ne yazık ki, sed
hangi kodlamanın kullanılacağını söylemenin standart bir yolu yoktur , bu yüzden her biri bunu kendi yöntemleriyle yapar.
Bu benim için çalışıyor:
$ vim -nEs +'%s/\%u9991//g' +wq file1
İstediğimden daha fazla bir damla; İşte tam bir açıklama:
-n
vim takas dosyasını devre dışı bırak-E
Geliştirilmiş moddan çık-s
sessiz mod+'%s/\%u9991//g'
ikame komutunu yürütün+wq
kaydet ve çıkfile1
yerinde değişiklik yaptı , doğru mu?
BASH'nin son sürümlerinde, sed ifadesinin etrafındaki alıntıları atlayın ve BASH'in çıkış karakterlerini kullanabilirsiniz. Sed ifadesindeki boşluklar veya sed ifadesinin BASH tarafından joker karakterler olarak yorumlanabileceği bölümleri ayrı ayrı alıntılanabilir.
$ echo "饥馑荐臻" | sed s/$'\u9991'//g
饥荐臻
echo 馑 | sed s/...//
herhangi bir şey yazdırıyor mu?