GNU/Linux >> Belajar Linux >  >> Linux

Mengapa sed gagal dengan karakter Internasional dan bagaimana cara memperbaikinya?

sed tidak diatur dengan baik untuk teks non-ASCII. Namun Anda dapat menggunakan (hampir) kode yang sama di perl dan dapatkan hasil yang Anda inginkan:

perl -pe 's/.*\| //' x

Saya pikir kesalahan terjadi jika pengkodean input file berbeda dari pengkodean pilihan lingkungan Anda.

Contoh:in adalah UTF-8

$ LANG=de_DE.UTF-8 sed 's/.*| //' < in
X
Y
$ LANG=de_DE.iso88591 sed 's/.*| //' < in
X 
Y

UTF-8 dapat dengan aman ditafsirkan sebagai ISO-8859-1, Anda akan mendapatkan karakter aneh tetapi selain itu semuanya baik-baik saja.

Contoh:in adalah ISO-8859-1

$ LANG=de_DE.UTF-8 sed 's/.*| //' < in
X
Gras Och Stenar Trad - From MöY
$ LANG=de_DE.iso88591 sed 's/.*| //' < in
X 
Y

ISO-8859-1 tidak dapat diartikan sebagai UTF-8, decoding file input gagal. Kecocokan yang aneh mungkin disebabkan oleh fakta bahwa sed mencoba memulihkan daripada gagal sepenuhnya.

Jawabannya didasarkan pada Debian Lenny/Sid dan sed 4.1.5.


Linux
  1. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

  2. Bash =~ Regex Dan Https://regex101.com/?

  3. Seberapa Portabel /dev/stdin, /dev/stdout Dan /dev/stderr?

  1. Ssh – Mengapa Upaya Penerusan X11 Gagal Dengan “connect /tmp/.x11-unix/x0:No Such File or Directory”?

  2. Mengapa find -exec mv {} ./target/ + tidak berfungsi?

  3. Instal binari ke /bin, /sbin, /usr/bin dan /usr/sbin, interaksi dengan --prefix dan DESTDIR

  1. Mengapa git gagal saat Push/fetch dengan Terlalu banyak file terbuka

  2. Kapan saya harus menggunakan /dev/shm/ dan kapan saya harus menggunakan /tmp/?

  3. Bagaimana cara mengganti beberapa spasi dengan satu tab