seddan awksuperset grep, ada hal-hal yang lebih mudah dilakukan dengan satu atau yang lain.
grep foodapat ditulis sed '/foo/!d'atau awk /foo/, tetapi pertimbangkan:
grep -i fooharus sed '/[fF][oO][oO]/!d'kecuali Anda ingin mempertimbangkan ekstensi non-standar seperti GNU sed '/foo/I!d'. Atau dengan awk: awk 'tolower($0) ~ /foo/'atau lagi menggunakan ekstensi GNU: awk -v IGNORECASE=1 /foo/.
Hal-hal yang berbeda dari alat yang baik dan rumit dengan alat lainnya:
grep
grepadalah alat sederhana tetapi memiliki mode operasi yang sangat khusus yang lebih sulit untuk direproduksi dengan awkatau sed:
grep -i untuk pencocokan case-sensitive (lihat di atas)
grep -Fe "$string"untuk pencarian string tetap ( export string; awk 'index($0, ENVIRON["string"])'dengan awk, tidak ada padanan langsung dengan sed).
- (non standar)
grep -runtuk pencarian rekursif
- (non standar)
grep -P/ pcregrepuntuk regexps seperti perl (beberapa sedimplementasi memiliki dukungan regexp seperti perl meskipun bukan yang paling utama)
- (non standar)
grep -ountuk mengembalikan bagian yang cocok (beberapa baris awkatau seduntuk melakukan hal yang sama)
- (tidak standar)
grep -A/B/Cuntuk mengembalikan konteks sekitar pertandingan (sekali lagi menyakitkan untuk dilakukan dengan cara yang sama dengan sedatau awk)
sed
s/foo/bar/: sed'S sperintah memiliki fitur yang sulit untuk menerapkan di awkseperti:
s/foo\(.*\)bar/\1/g: capturing (meskipun GNU awk memiliki gensub()ekstensi untuk itu)
s/foo/bar/3: ganti kemunculan ke-3 di setiap baris
- (non-standar): pengeditan file di tempat (meskipun sekarang juga didukung oleh GNU
awk).
awk
awk adalah fitur yang paling kaya dari ketiganya.
- bagus untuk berurusan dengan angka
- bagus untuk berurusan dengan input yang diformat dalam kolom.
- baik untuk mengekstraksi dan menggabungkan data dari berbagai sumber, dengan array asosiatifnya.
perl
perlsebagai alat ekstraksi dan pelaporan yang praktis memiliki yang terbaik dari semua itu. Itulah yang awalnya dirancang untuk (menjadi alat yang membuat semua itu sed/ awkusang).
Menguasai perlmelakukan pemrosesan teks memang memberi keuntungan serius. Saya akan merekomendasikan meluangkan waktu untuk itu, bahkan sebelum melihat sedperintah yang kurang umum misalnya.
kinerja
Sebagai aturan praktis, semakin khusus alat ini, semakin efisien tugasnya. Tapi itu juga sangat tergantung pada implementasi, tugas dan beberapa faktor lain dan kinerja dapat memiliki trade-off yang mungkin perlu diperhitungkan.
Misalnya, ada beberapa grepatau sedimplementasi yang sangat cepat, tetapi misalnya mereka tidak mendukung karakter multibyte sehingga hanya dapat bekerja dengan benar pada teks AS-Inggris di lokal multi-byte. Atau mereka cepat karena mereka bekerja pada buffer panjang tetap kecil dan dengan demikian tidak dapat bekerja pada input sewenang-wenang ...