Eu usei este comando para exibir o primeiro resultado dos arquivos no meu diretório.
ls | head -n 1
Minha pergunta simples é: como posso modificar esse comando para exibir o enésimo resultado?
Obrigado!
fonte
Eu usei este comando para exibir o primeiro resultado dos arquivos no meu diretório.
ls | head -n 1
Minha pergunta simples é: como posso modificar esse comando para exibir o enésimo resultado?
Obrigado!
Você pode usar sed para selecionar uma única linha, por exemplo, linha 12:
ls | sed -n 12p
A opção -n
pede ao sed para não imprimir todas as linhas (o que normalmente faz) e 12p
pede para imprimir o espaço do padrão quando o endereço for 12.
Pode haver maneiras melhores de fazer isso, mas provavelmente é o mais fácil: ls | head -<n> | tail -1
Para a frente com awk
:
$ ls / | awk 'NR==4'
etc
Eu tenho isso no meu .bashrc
.
lsn () {
ls ${@:2} | head -n $1 | tail -n 1
}
Isso é chamado assim: lsn 4
por exemplo. O $2
permite que você use
opções sobre ls
isso lsn 4 -lah
também é válido.
Nota: ao usar a -l
bandeira, ls
há uma linha adicional na parte superior do resultado. O que distorceria o resultado dessa função.
ls "$@"
passarlsn
os argumentos dels
. Claro, depois de usarshift
para tirar$1
.$@
abordagem. Bem manchado.Com
zsh
e qualificadores glob:ou
imprimirá o sétimo arquivo da lista de arquivos classificados por nome.
ou
imprimirá o 7º arquivo da lista de arquivos
o
reduzidos pelom
tempo (o mais recente primeiro - semelhante à extração da 7ª entrada dals -t
saída).Idealmente, se você estiver processando a
ls
saída, use algo comols -q | command(s)
where-q
prints em?
vez de caracteres descolados (como novas linhas) ecommand(s)
processe apenas N linhas de saída, imprima a enésima e depois pare.fonte
Com cauda e cabeça (adicionado nl para maior clareza). Vamos buscar a quinta linha:
Isso irá para a quinta linha:
Então, obviamente, siga -1
fonte