İçeriği sonuca dahil etmeden eşleştirmeniz gerektiğinden (eşleşmelidir, name="
ancak bu istenen sonucun parçası değildir) bir tür sıfır genişlik eşleştirme veya grup yakalama gereklidir. Bu, aşağıdaki araçlarla kolayca yapılabilir:
Perl
Perl ile n
satır satır döngü seçeneğini kullanabilir ve bir yakalama grubunun içeriğini eşleşirse yazdırabilirsiniz:
perl -ne 'print "$1\n" if /name="(.*?)"/' filename
GNU grep
GNU grep gibi gelişmiş bir grep sürümüne sahipseniz, bu -P
seçeneğe sahip olabilirsiniz . Bu seçenek Perl benzeri regex'i etkinleştirerek, \K
hangisinin arkaya bakma kısayolunu kullanmanıza izin verir . Eşleşme konumunu sıfırlayacaktır, yani önündeki her şey sıfır genişliktedir.
grep -Po 'name="\K.*?(?=")' filename
o
Opsiyon markaları yerine bütün hattının sadece eşleşen metin yazdırmak grep.
Vim - Metin Düzenleyici
Başka bir yol da doğrudan bir metin düzenleyici kullanmaktır. Vim ile bunu gerçekleştirmenin çeşitli yollarından biri, satırları olmadan silmek
name=
ve sonra ortaya çıkan satırlardan içeriği çıkarmak olacaktır:
:v/.*name="\v([^"]+).*/d|%s//\1
Standart grep
Bu araçlara erişiminiz yoksa, herhangi bir nedenle, standart grep ile benzer bir şey elde edilebilir. Ancak, etrafa bakmadan, daha sonra biraz temizlik gerektirecektir:
grep -o 'name="[^"]*"' filename
Sonuçları kaydetme hakkında bir not
Yukarıdaki tüm komutlarda sonuçlar e-posta adresine gönderilecektir stdout
. Bunları her zaman ekleyerek bir dosyaya borulayarak kaydedebileceğinizi unutmamak önemlidir:
> result
komutun sonuna kadar.