O comando sed
no exemplo 6 extrai apenas o número de linhas da saída wc -l
.
Ele está executando wc -l
on $f
(o arquivo que pertence à execução do script que foi passado como um argumento). Isso normalmente produziria uma saída assim:
$ wc -l .bashrc
17 .bashrc
Número de linhas na coluna 1 e nome do arquivo na coluna 2. O comando sed
está capturando apenas o número de linhas de uma maneira bastante desnecessária.
$ wc -l .bashrc | sed 's/^\([0-9]*\).*$//'
17
A sed
declaração 's/^\([0-9]*\).*$//'
faz o seguinte:
-
^
- corresponde ao início da linha -
\([0-9]*\)
- Corresponde a números ilimitados (Os parênteses com escape formam um grupo de captura) -
.*
- Corresponde a qualquer coisa vezes ilimitadas -
$
- corresponde ao final da linha -
- Representa o conteúdo do primeiro grupo de captura.
Essencialmente, isso corresponde a qualquer linha que comece com um número e substitua toda a linha pelo primeiro grupo de captura (o número).
Obrigado Stephen Kitt por recomendar isso:
$ wc -l < .bashrc
17
Caso contrário, usar cut
ou awk
seria melhor para algo assim:
$ wc -l .bashrc | cut -d' ' -f1
17
$ wc -l .bashrc | awk '{print $1}'
17