Execute xargs na primeira palavra em uma linha

3

Existe uma maneira de executar xargs apenas no primeiro argumento de uma linha? Então, se minha entrada é a saída padrão de um grep , assim:

./file1       "matching string"
./file2       "matching 2"

O que eu quero fazer é abrir todos os nomes de arquivos em Vim com algo como | xargs vim .

Posso dizer a xargs para pegar a primeira palavra de cada linha?

Eu sei que existem outras maneiras de fazer isso, incluindo o AWK para remover todo o lixo extra da linha, e fazer com que o grep retorne apenas o nome do arquivo - Estou curioso para saber se você pode fazer isso com xargs.

    
por Kevin Burke 06.12.2011 / 23:48

3 respostas

4

Como outros afirmaram, o xargs genérico não pode fazer isso sozinho. Continuando com as ferramentas comuns do Unix, você precisará usar o comando cut para remover as informações extras antes de enviá-las para o xargs.

Supondo que sua entrada seja assim:

./file1       "matching string"
./file2       "matching 2"

Você pode usar |cut -f 1 -d ' ' | xargs -n 1 vi para executar os comandos.

  • O comando cut -f 1 -d ' ' envia apenas o que está na coluna 1 para a saída.
  • O xargs -n 1 vi diz ao xargs para executar o vi, mas usa apenas um arquivo de cada vez.

Não há problema em remover o -n 1 se você quiser usar uma única instância do vi para editar todos os arquivos (para manter os buffers de copiar / colar nos arquivos).

    
por 07.12.2011 / 15:29
1

Você não pode fazer isso com o próprio xargs.

Portanto, suas opções são tornar grep output exatamente o que você precisa passar para xargs , ou passar por cut para remover o que você precisa no meio.

Lembre-se que esta é a maneira * nix - para manter cada utilitário o mais focado possível, e usá-los em combinação para alcançar resultados (ao invés de duplicar a funcionalidade em vários utilitários).

    
por 07.12.2011 / 00:38
1

Usando o GNU Parallel, você pode fazer:

... | grep ... | parallel --colsep ' +' -X --tty vi {1}

Funciona com o emacs também:

... | grep ... | parallel --colsep ' +' -X --tty emacs {1}

Você pode instalar o GNU Parallel simplesmente por:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel

Assista aos vídeos de introdução para saber mais: link

Percorra o tutorial (man parallel_tutorial). Você linha de comando com amor por você.

    
por 07.12.2011 / 15:11

Tags