Ada banyak variasi pada sintaks ekspresi reguler . Alat pertama di dunia unix yang memiliki ekspresi reguler tidak memiliki kemampuan penuh ekspresi reguler, hanya set karakter ( […]
dan .
), pengulangan ( *
) dan jangkar baris ( ^
dan $
). Ekspresi reguler dasar hanya memiliki operator ini. Sed adalah alat jadul dan menggunakan regexps dasar.
Banyak implementasi sed memiliki ekstensi untuk pencocokan regexp penuh. Karena karakter |
singkatan sendiri, Anda perlu menggunakan \|
untuk pergantian, dan sama \(
dan \)
untuk mengelompokkan. Perhatikan bahwa standar POSIX tidak mengamanatkan yang \|
didukung dalam ekspresi reguler dasar , dan beberapa sistem (misalnya OpenBSD ) tidak memilikinya.
Beberapa versi sed memiliki opsi untuk beralih ke ekspresi reguler yang diperluas , di mana (…)
digunakan untuk pengelompokan dan |
untuk pergantian. Dengan sed GNU (yaitu di Linux atau Cygwin) atau Busybox , berikan -r
opsi. Pada FreeBSD atau OSX , berikan -E
opsi.
Jika sed Anda tidak memiliki pergantian, Anda dapat menelepon awk
saja. Ini diamanatkan oleh POSIX , tetapi sedikit bertele-tele untuk tugas ini, dan itu tidak mendukung referensi.
awk '{gsub(/foo|bar/, "narf")}' <fileName.old >fileName.new
Omong-omong, hanya GNU dan Busybox yang mendukung penggantian file di tempat. Versi awk dan sed lainnya tidak. Lihat Bisakah saya membuat `cut` mengubah file pada tempatnya?
Jika Anda memiliki Perl, sering berguna dalam cara satu-alat-tidak-semua untuk pemrosesan teks satu-liner. Sebagian besar dari apa yang mudah dalam sed, awk, dan sisanya tidak jauh lebih sulit di Perl, dan Anda dapat belajar satu alat (jika rumit).
perl -i -pe 's/foo|bar/narf/g' fileName
Gilles 'SANGAT berhenti menjadi jahat'
sumber