Grep ne zaman kullanılır, daha az, awk, sed [kapalı]


17

Linux dünyasına giriyorum ve işte grepgittikçe daha fazla kullanıyorum . Bunu yaparak bazen istediğim şey için yeterli olmadığını anlıyorum.

grepBirkaç gün önce mücadele ediyordum ve üst düzey bir Linux yöneticisi olan bir meslektaşım bana kullanmamı söyledi awk. Ne kadar hızlı sonuç aldığım karşısında şaşırdım.

Benim sorum şu: Birini diğerinden ne zaman kullanmayı seçiyorsunuz? Çalışmaya başlamadan grepve çok zaman harcamadan önce , ne zaman yapabilirim awkve zamandan tasarruf edebilirsem kendime hangi soruları sorabilirim ?


Bu iyi bir soru ama gerçekten çok geniş ve öncelikle fikir tabanlı. Sorunuzu cevaplamak için grep'i awk yerine kullanmak gerçekten awk / sed kullandığınıza bağlıdır. Birinin bunu ikincisinde kullanmasının birkaç nedeni vardır, örneğin grep'in sunabileceğinden daha spesifik bir şey aramak veya dosyaları belirli bir dizeyle (sed kullanarak) değiştirmeye / düzenlemeye çalışıyorsanız. Ama yine de, tüm konfor seviyenize ve awk / sed kullanma deneyiminize bağlıdır.
ryekayo

7
Kullanım lessiçin görüntülemek bir dosya. Kullanım grepiçin arama Dosya içinde. Kullanım sediçin düzenleme bir dosya. Kullanım awküzerinde grepve sedbu süreçte istediğiniz dosya çeşit sahip olduğunda yapısı (örneğin sütunlar gibi). Kullanım sedüzerinde awkAğırlıklı olarak (örneğin metnin silme veya ekleme hatları gibi) hatları ile uğraşmak istediğinizde. Eminim birisi 20 sayfalık bir cevap yazacak ve benden daha eksiksiz olacak.
Satō Katsura

Merhaba Sato, Bu uzunluk hakkında değil, söylenenler. Ve siz birkaç satır çok bilgilendiricisiniz. Teşekkür ederim.
frankguthrie

Yanıtlar:


25

sedve awkbunların üst kümeleri, grepbiri ya da diğeri ile daha kolay olan şeyler var.

grep fooyazılabilir sed '/foo/!d'veya awk /foo/düşünün:

grep -i foosed '/[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

grepbasit bir araçtır, ancak çoğaltılması daha zor olan çok özel çalışma modlarına sahiptir awkveya 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 awkdoğrudan eşdeğer yok sed).
  • grep -rözyinelemeli arama için (standart dışı)
  • (standart dışı) grep -P/ pcregrepperl benzeri regexps için (bazı seduygulamalarda perl benzeri regexp desteği vardır, ancak en önemlileri değil)
  • (standart olmayan) grep -oeşleşen kısmı döndürmek için (birkaç satır awkveya sedaynı işlemi yapmak için)
  • (standart dışı) grep -A/B/Cmaçın bağlamını döndürmek için ( sedveya ile benzer şekilde yapmak acı verici awk)

sed

  • s/foo/bar/: sed's skomutu aşağıdaki awkgibi 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

perlpratik bir çıkarma ve raporlama aracı olarak tüm bunlardan en iyisine sahiptir. Başlangıçta bunun için tasarlandı (tüm bunları yapan sed/ awkkullanılmayan araç olmak ).

perlMetin 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 grepveya seduygulamalar 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 ...


Mükemmel cevap! Aletlerin verimliliğini biliyor musunuz? OP'nin ifadesi hakkında kafam karıştı, bu awkçok daha hızlı grep.
pfnuesel

@pfnuesel, bu büyük ölçüde uygulamaya ve kullanım şekline bağlıdır. Örneğin, mawkçok verimli olduğu bilinir (ancak diğer bazı araçlardan daha etkili olmasının bir nedeni olan çok baytlı karakterleri desteklemez)
Stéphane Chazelas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.