xargs separados por nova linha

36

É possível fazer com que xargs use apenas nova linha como separador? (em bash no Linux e OS X se isso importa)

Eu sei que -0 pode ser usado, mas é o PITA como nem todo comando suporta saída delimitada por NUL.

    
por Kornel 31.03.2010 / 02:37

5 respostas

15

Algo ao longo das linhas de

alias myxargs='perl -p -e "s/\n/
alias myxargs='perl -p -e "s/\n/%pre%/;" | xargs -0'
cat nonzerofile | myxargs command
/;" | xargs -0' cat nonzerofile | myxargs command

deve funcionar.

    
por 31.03.2010 / 03:39
51

GNU xargs (padrão no Linux; instale findutils do MacPorts no OS X para obtê-lo) suporta -d , que permite especificar um delimitador personalizado para entrada, para que você possa fazer

ls *foo | xargs -d '\n' -P4 foo 
    
por 04.04.2010 / 14:42
5

Com o Bash, eu geralmente prefiro evitar xargs para qualquer coisa um pouco complicada, em favor dos loops while-read. Para sua pergunta, while read -ar LINE; do ...; done faz o trabalho (lembre-se de usar a sintaxe de matriz com LINE, por exemplo, ${LINE[@]} para toda a linha). Isso não requer nenhum truque: por padrão, read usa apenas \n como o caractere terminador de linha.

Eu deveria postar uma pergunta sobre SO sobre os prós e contras contras de xargs x loops while-read ... feito!

    
por 01.04.2010 / 13:20
0

Não com a versão padrão. Eu tenho uma versão hackeada que faz isso - eu a usei antes de saber sobre ' find ... -print0 | xargs -0 ... '. Entre em contato se você quiser uma cópia - veja meu perfil. (Sem ciência de foguetes - isso praticamente faz o trabalho, no entanto. Não é uma réplica completa de xargs.)

    
por 31.03.2010 / 02:46
0

Que tal cat file | xargs | sed 's/ /\n/ig' converterá espaços em novas linhas, usando ferramentas bash padrão do Linux.

    
por 05.12.2012 / 07:32