[Pythonic 15] Memecah Sekumpulan Kata dalam Kalimat ke dalam List (Splitting a String) pada Python
Daftar Isi:
Cukup sering ketika bekerja dengan file teks Anda harus menemukan dan mengganti string teks dalam satu file atau lebih.
Sed a is a t ed ed itor. Itu dapat melakukan manipulasi teks dasar pada file dan input stream seperti pipa. Dengan
sed
Anda dapat mencari, menemukan dan mengganti, menyisipkan, dan menghapus kata dan garis. Ini mendukung ekspresi reguler dasar dan lanjutan yang memungkinkan Anda untuk mencocokkan pola yang kompleks.
, kita akan berbicara tentang cara menemukan dan mengganti string dengan
sed
. Kami juga akan menunjukkan kepada Anda bagaimana melakukan pencarian dan penggantian rekursif.
Cari dan Ganti String dengan
sed
Ada beberapa versi
sed
, dengan beberapa perbedaan fungsional di antara mereka. macOS menggunakan versi BSD dan sebagian besar distribusi Linux datang dengan GNU dan pra-instal secara default. Kami akan menggunakan versi GNU.
Bentuk umum mencari dan mengganti teks menggunakan
sed
mengambil bentuk berikut:
sed -i 's/SEARCH_REGEX/REPLACEMENT/g' INPUTFILE
-
-i
- Secara defaultsed
menulis outputnya ke output standar. Pilihan ini memberitahu Anda untuk mengedit file di tempat. Jika ekstensi diberikan (ex -i.bak) cadangan dari file asli akan dibuat.s
- Perintah pengganti, mungkin perintah yang paling banyak digunakan di sed./ / /
- Karakter pembatas. Itu bisa berupa karakter apa saja tetapi biasanya karakter garis miring (/
) digunakan.SEARCH_REGEX
- String normal atau ekspresi reguler untuk mencari.REPLACEMENT
- String pengganti.g
- Bendera pengganti global. Secara default,sed
membaca file baris demi baris dan hanya mengubah kemunculan pertamaSEARCH_REGEX
pada satu baris. Ketika bendera pengganti disediakan, semua kemunculan akan diganti.INPUTFILE
- Nama file yang ingin Anda jalankan perintahnya.
Ini adalah praktik yang baik untuk menempatkan tanda kutip di argumen sehingga karakter meta shell tidak akan berkembang.
Mari kita lihat contoh cara menggunakan perintah
sed
untuk mencari dan mengganti teks dalam file dengan beberapa opsi dan flag yang paling umum digunakan.
Untuk tujuan demonstrasi, kami akan menggunakan file berikut:
file.txt
123 Foo foo foo foo /bin/bash Ubuntu foobar 456
sed -i 's/foo/linux/' file.txt
123 Foo linux foo linux /bin/bash Ubuntu foobar 456
Dengan bendera pengganti global dan menggantikan semua kemunculan pola pencarian:
sed -i 's/foo/linux/g' file.txt
123 Foo linux linux linux /bin/bash Ubuntu linuxbar 456
Seperti yang mungkin telah Anda perhatikan, pada contoh sebelumnya
foo
substring di dalam string
foobar
juga diganti. Jika ini bukan perilaku yang diinginkan, gunakan ekspresi batas kata (
\b
) di kedua ujung string pencarian. Ini memastikan sebagian kata tidak cocok.
sed -i 's/\bfoo\b/linux/g' file.txt
123 Foo linux linux linux /bin/bash Ubuntu foobar 456
Untuk membuat case match pola tidak sensitif, gunakan bendera
I
Pada contoh di bawah ini kita menggunakan flag
g
dan
I
:
sed -i 's/foo/linux/gI' file.txt
123 linux linux linux linux /bin/bash Ubuntu linuxbar 456
sed -i 's/\/bin\/bash/\/usr\/bin\/zsh/g' file.txt
Opsi yang lebih mudah dan lebih mudah dibaca adalah dengan menggunakan karakter pembatas lainnya. Sebagian besar orang menggunakan bilah vertikal (
|
) atau titik dua (:) tetapi Anda dapat menggunakan karakter lain:
sed -i 's|/bin/bash|/usr/bin/zsh|g' file.txt
123 Foo foo foo foo /usr/bin/zsh Ubuntu foobar 456
Anda juga dapat menggunakan ekspresi reguler. Misalnya untuk mencari semua angka 3 digit dan menggantinya dengan
number
string yang akan Anda gunakan:
sed -i 's/\b\{3}\b/number/g' file.txt
number Foo foo foo foo /bin/bash demo foobar number
Fitur lain yang berguna dari sed adalah Anda dapat menggunakan karakter ampersand
&
yang sesuai dengan pola yang cocok. Karakter dapat digunakan beberapa kali.
Misalnya, jika Anda ingin menambahkan kurung kurawal
{}
sekitar setiap 3 digit angka, ketik:
sed -i 's/\b\{3}\b/{&}/g' file.txt
{123} Foo foo foo foo /bin/bash demo foobar {456}
Terakhir namun tidak kalah pentingnya, selalu merupakan ide bagus untuk membuat cadangan saat mengedit file dengan
sed
. Untuk melakukan itu cukup berikan ekstensi ke opsi
-i
. Misalnya, untuk mengedit
file.txt
dan menyimpan file asli sebagai
file.txt.bak
yang akan Anda gunakan:
sed -i.bak 's/foo/linux/g' file.txt
ls
Cari dan Ganti Rekursif
Kadang-kadang Anda ingin mencari direktori secara rekursif untuk file yang berisi string dan mengganti string di semua file. Ini dapat dilakukan dengan menggunakan perintah seperti
find
atau
grep
untuk secara rekursif menemukan file dalam direktori dan mem-piping nama file ke
sed
.
Perintah berikut akan secara rekursif mencari file di direktori kerja saat ini dan meneruskan nama file ke
sed
.
find. -type f -exec sed -i 's/foo/bar/g' {} +
Untuk menghindari masalah dengan file yang mengandung spasi dalam nama mereka gunakan opsi
-print0
yang memberitahu
find
untuk mencetak nama file, diikuti oleh karakter nol dan pipa keluaran ke
sed
menggunakan
xargs -0
:
find. -type f -print0 | xargs -0 sed -i 's/foo/bar/g'
Untuk mengecualikan direktori gunakan opsi
-not -path
. Misalnya, jika Anda mengganti sebuah string di repo git lokal Anda untuk mengecualikan semua file yang dimulai dengan titik (
.
), Gunakan:
find. -type f -not -path '*/\.*' -print0 | xargs -0 sed -i 's/foo/bar/g'
find. -type f -name "*.md" -print0 | xargs -0 sed -i 's/foo/bar/g'
Pilihan lain adalah dengan menggunakan perintah
grep
untuk secara rekursif menemukan semua file yang mengandung pola pencarian dan kemudian menyalurkan nama file ke
sed
:
grep -rlZ 'foo'. | xargs -0 sed -i.bak 's/foo/bar/g'
Kesimpulan
Meskipun mungkin terlihat rumit dan kompleks, pada awalnya, mencari dan mengganti teks dalam file dengan
sed
sangat sederhana.
Untuk mempelajari lebih lanjut tentang perintah, opsi, dan flag, kunjungi manual sed GNU dan tutorial Grymoire. Jika Anda memiliki pertanyaan atau umpan balik, jangan ragu untuk meninggalkan komentar.
terminal sedCara Menemukan dan Mengganti Semua Gambar di Word sekaligus
Sangat mudah untuk mengganti semua gambar di Microsoft Word. Gunakan metode Cari dan Ganti untuk menemukan gambar yang Anda inginkan & ganti semua gambar dengan gambar baru di mana saja.
Bagaimana Menemukan dan Mengganti Karakter Wildcard di Excel
Cara mudah untuk menemukan dan mengganti karakter wildcard di Excel sebagai teks normal. Temukan karakter wildcard sebagai teks normal di Excel menggunakan tilde karakter khusus
Bagaimana cara batch secara efisien mengganti nama file menggunakan renamer pribadi
Ubah nama otomatis beberapa file, pantau direktori menggunakan renamer pribadi untuk Windows.