sed
ve awk
bunların üst kümeleri, grep
biri ya da diğeri ile daha kolay olan şeyler var.
grep foo
yazılabilir sed '/foo/!d'
veya awk /foo/
düşünün:
grep -i foo
sed '/[fF][oO][oO]/!d'
GNU'lar gibi standart olmayan uzantıları göz önünde bulundurmak istemiyorsanız , olması gerekir sed '/foo/I!d'
. Veya ile awk
: awk 'tolower($0) ~ /foo/'
ya yine GNU uzantısını kullanarak: awk -v IGNORECASE=1 /foo/
.
Farklı araçların diğer araçlarla iyi ve hantal olduğu şeyler:
grep
grep
basit bir araçtır, ancak çoğaltılması daha zor olan çok özel çalışma modlarına sahiptir awk
veya sed
:
grep -i
büyük / küçük harfe duyarlı olmayan eşleştirme için (yukarıya bakın)
grep -Fe "$string"
sabit dize araması için ( export string; awk 'index($0, ENVIRON["string"])'
ile awk
doğrudan eşdeğer yok sed
).
grep -r
özyinelemeli arama için (standart dışı)
- (standart dışı)
grep -P
/ pcregrep
perl benzeri regexps için (bazı sed
uygulamalarda perl benzeri regexp desteği vardır, ancak en önemlileri değil)
- (standart olmayan)
grep -o
eşleşen kısmı döndürmek için (birkaç satır awk
veya sed
aynı işlemi yapmak için)
- (standart dışı)
grep -A/B/C
maçın bağlamını döndürmek için ( sed
veya ile benzer şekilde yapmak acı verici awk
)
sed
s/foo/bar/
: sed
's s
komutu aşağıdaki awk
gibi uygulanması zor özelliklere sahiptir :
s/foo\(.*\)bar/\1/g
: yakalama (GNU awk'ın bunun için bir gensub()
uzantısı olsa da)
s/foo/bar/3
: her satırdaki 3. tekrarlamayı değiştir
- (standart dışı): yerinde dosya düzenleme (
awk
şimdi GNU tarafından da desteklenmesine rağmen ).
awk
awk
üç zenginlikle en zengin olanıdır.
- sayılarla uğraşmak için iyi
- sütunlarla biçimlendirilmiş girdilerle uğraşmak için iyi.
- ilişkilendirilebilir dizilerle farklı kaynaklardan veri ayıklamak ve birleştirmek için iyidir.
perl
perl
pratik bir çıkarma ve raporlama aracı olarak tüm bunlardan en iyisine sahiptir. Başlangıçta bunun için tasarlandı (tüm bunları yapan sed
/ awk
kullanılmayan araç olmak ).
perl
Metin işleme konusunda uzmanlaşmak ciddi bir avantaj sağlar. sed
Örneğin daha az yaygın olan komutlara bakmadan önce biraz zaman geçirmenizi tavsiye ederim .
verim
Genel bir kural olarak, araç ne kadar uzmanlaşırsa, görevdeki en verimli olandır. Ancak bu aynı zamanda uygulamaya, göreve ve diğer birkaç faktöre ve performansa da bağlı olarak dikkate alınması gereken değiş tokuşlara sahip olabilir.
Örneğin , çok hızlı bazı uygulamalar grep
veya sed
uygulamalar vardır, ancak örneğin çok baytlı karakterleri desteklemezler, bu nedenle yalnızca çok baytlık yerel ayarlarda ABD-İngilizce metninde doğru şekilde çalışabilirler. Veya hızlıdırlar çünkü küçük bir sabit uzunluklu tampon üzerinde çalışırlar ve böylece keyfi girdi üzerinde çalışamazlar ...