Jadi pertanyaan sebenarnya adalah - apakah ada yang punya ide bagaimana menghapus M-BM-
karakter khusus tanpa risiko kehilangan karakter lain?
Saya memiliki serangkaian teks:
" . . ."
itu adalah
space dot space dot space dot
Saya mencoba mengganti semua kemunculan string ini dalam file teks
"..."
itu adalah
dot dot dot
Saya coba lakukan dengan sed:
sed -r 's:\s\.\s\.\s\.:...:g' -i sed-dots
Sayangnya, itu tidak mengubah file input sedikit pun. File: https://www.dropbox.com/s/46zmiruy3ln85a1/sed-dots
Ketika saya mencoba untuk mengganti string yang sama di editor teks (saya menggunakan geany) itu ditemukan dan diganti dengan benar.
Satu-satunya alasan yang dapat saya pikirkan adalah bahwa beberapa (atau semua) ruang itu bukan benar-benar ruang, tetapi beberapa karakter khusus.
Adakah yang tahu cara menemukan dan mengganti string itu dengan sed (atau alat baris perintah lainnya)? Silakan uji ide Anda pada file saya, karena masalahnya tidak sejelas kelihatannya - ini sebabnya saya bertanya tentangnya.
Setelah menggunakan cat -A
myfile, sepertinya masalah bukan spasi, melainkan M-BM-
karakter khusus. Menggunakan simbol apa pun yang .
disarankan untuk pencarian bukanlah ide yang baik karena ada risiko beberapa karakter lain akan dihapus.
sumber
echo
alih-alih melakukan catting file, setidaknya ketika Anda menyimpan file, Anda tahu shellnya tidak menafsirkan apa-apa, dan juga tidak ada gema.cat
- hanyased
memuat file (sesuai contoh OP) tetapi jangan menyimpan inline (hapus-i
, sehingga Anda dapat melihat dan menguji terhadap output).cat -A sed-dots
Anda dapat melihat bahwa "spasi" antara titik-titik adalahM-BM-
karakter khusus ... Tidak yakin bagaimana mereka merayap di sana tetapi mereka perlu diganti. Jika Anda tidak dapat menargetkan mereka dengan baik, ini berfungsi:sed -r 's/(\s\..\..\.)/ dot dot dot/ig' sed-dots
Coba yang berikut ini untuk mengganti semua "." Ke "."
Tapi untuk ". . ." untuk "..."
sumber
Saya dapat menggunakan file Anda ketika saya menjalankannya:
Ini berfungsi tanpa langkah konversi:
sumber