Se hai GNU grep, puoi usare la sua -o
opzione per cercare un regex e produrre solo la parte corrispondente. (Altre implementazioni grep possono mostrare solo l'intera riga.) Se ci sono più corrispondenze su una riga, vengono stampate su righe separate.
grep -o '\[[0-9]*\]'
Se vuoi solo le cifre e non le parentesi, è un po 'più difficile; devi usare un'asserzione di larghezza zero: una regexp che corrisponde alla stringa vuota, ma solo se è preceduta o seguita, a seconda dei casi, da una parentesi. Le asserzioni di larghezza zero sono disponibili solo nella sintassi Perl.
grep -P -o '(?<=\[)[0-9]*(?=\])'
Con sed, è necessario disattivare la stampa -n
e abbinare l'intera linea e conservare solo la parte corrispondente. Se sono presenti più corrispondenze possibili su una riga, viene stampata solo l'ultima corrispondenza. Vedi Estrarre un regex abbinato a 'sed' senza stampare i personaggi circostanti per maggiori dettagli sull'uso di sed qui.
sed -n 's/^.*\(\[[0-9]*\]\).*/\1/p'
o se vuoi solo le cifre e non le parentesi:
sed -n 's/^.*\[\([0-9]*\)\].*/\1/p'
Senza grep -o
, Perl è lo strumento di scelta qui se vuoi qualcosa che sia sia semplice che comprensibile. Su ogni riga ( -n
), se la riga contiene una corrispondenza per \[[0-9]*\]
, quindi stampare quella corrispondenza ( $&
) e una nuova riga ( -l
).
perl -l -ne '/\[[0-9]*\]/ and print $&'
Se si desidera solo le cifre, inserire le parentesi nella regex per delimitare un gruppo e stampare solo quel gruppo.
perl -l -ne '/\[([0-9]*)\]/ and print $1'
PS Se si desidera richiedere solo una o più cifre tra parentesi, passare [0-9]*
a [0-9][0-9]*
o a [0-9]+
in Perl.
[number]
" significhi tranne[0-9]