Obtendo a linha de string da saída de pipe anterior por número de linha

1

Depois de executar o seguinte comando, obtenho:

[root@yukiko /]# find / -iname .bashrc
/home/clamav/.bashrc
/home/vpopmail/.bashrc
/etc/skel/.bashrc
/root/.bashrc

Mas eu gostaria de ter um comando que imprima uma linha específica, fornecendo o comando com o número da linha, por exemplo:

[root@yukiko /]# find / -iname .bashrc | getline(2)
/home/vpopmail/.bashrc

Existe tal comando no CentOS?

    
por bobo 08.02.2010 / 12:54

3 respostas

4

Você pode usar uma combinação de cabeça e cauda:

find / -iname .bashrc | head -n 2 | tail -n 1

isto retornará a última linha das primeiras duas linhas (então a segunda linha). Você pode obter head para fazer o trabalho sozinho se tiver uma opção para ignorar o número X de linhas (verifique man head ). Também não é improvável que exista outra ferramenta para fazer o trabalho no conjunto que é o pacote coretulis incluído pela maioria das variantes do Linux, então vale a pena verificar o manual para este grupo de ferramentas (veja link ou sua cópia local) uma verificação rápida. Vale a pena dar uma olhada, mesmo que seja apenas para se atualizar sobre quais ferramentas são comumente disponíveis.

    
por 08.02.2010 / 13:24
4
find / -name .bashrc | sed -n '2{p;q}'
    
por 08.02.2010 / 15:13
1

Aqui está um chicote de um script Perl para fazer isso

#!/usr/bin/perl
use strict; 
use warnings;

my $ln = $ARGV[0];
#note that further evolution may have a regular file here...
my $line = 1; 
my $wantedline;
while(<STDIN>)
{
  $wantedline = $_;
  last if($line++ == $ln);
}
print $wantedline;
    
por 08.02.2010 / 17:39