GNU grep'iniz varsa, -o
normal ifadeyi aramak ve yalnızca eşleşen kısmı çıkarmak için bu seçeneği kullanabilirsiniz . (Diğer grep uygulamaları yalnızca tüm satırı gösterebilir.) Bir satırda birden fazla eşleşme varsa, bunlar ayrı satırlara yazdırılır.
grep -o '\[[0-9]*\]'
Köşeli parantezleri değil, yalnızca rakamları istiyorsanız, biraz daha zor; sıfır genişlikli bir iddiayı kullanmanız gerekir: boş dizeyle eşleşen bir regexp, ancak yalnızca önce gelirse veya duruma göre izlenirse bir parantez. Sıfır genişlikli iddialar yalnızca Perl sözdiziminde kullanılabilir.
grep -P -o '(?<=\[)[0-9]*(?=\])'
Sed ile yazdırmayı kapatmanız -n
ve tüm çizgiyi eşleştirmeniz ve yalnızca eşleşen parçayı tutmanız gerekir. Bir satırda birkaç olası eşleşme varsa, yalnızca son eşleşme yazdırılır. Bkz çevreleyen karakterleri yazdırmadan 'sed' ile eşleşen bir düzenli ifade ayıklanıyor burada sed kullanarak ilgili daha fazla ayrıntı için.
sed -n 's/^.*\(\[[0-9]*\]\).*/\1/p'
veya parantezleri değil, yalnızca rakamları istiyorsanız:
sed -n 's/^.*\[\([0-9]*\)\].*/\1/p'
Olmadan grep -o
basit ve anlaşılır hem şey istiyorsanız, Perl burada tercih edilen bir araçtır. Her satırda ( -n
), satırda bir eşleşme varsa, \[[0-9]*\]
o eşleşmeyi ( $&
) ve yeni satırı ( -l
) yazdırın .
perl -l -ne '/\[[0-9]*\]/ and print $&'
Yalnızca rakamları istiyorsanız, bir grubu sınırlamak için normal ifadeye parantez koyun ve yalnızca o grubu yazdırın.
perl -l -ne '/\[([0-9]*)\]/ and print $1'
PS yalnızca bir veya daha fazla parantez basamak, değişiklik yapılmasını gerektirebilir istiyorsanız [0-9]*
için [0-9][0-9]*
, ya da [0-9]+
Perl.
[number]
anlamına gelir[0-9]