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.
Ambil tangkapan layar melalui skrip Python di Linux
Apa arti angka dalam tanda kurung yang ditampilkan setelah nama perintah Unix di halaman manual?