¿Qué es lo que estás tratando de lograr? Puede haber otra forma de hacerlo.
Pausado hasta nuevo aviso.
@Dennis Lo uso para varias cosas, a menudo en tubería con grep, sed, awk muy básico, etc., principalmente para paralelizar la ejecución. find -print0 -name \*.foo -maxdepth 1 | xargs -0 -P4es demasiado para escribir en comparación con ls *.foo | xargs -P4.
Kornel
Las secuencias de comandos y las funciones son dos formas excelentes de reducir la escritura.
Tengo alias xxargs="xargs -d '\n'"en mi bashrc. Así que puedo hacer cosas como esta:grep -IRl foo | xxargs sed -i s/foo/bar/g
tylerl
44
Esta realmente debería ser la respuesta aceptada. No hay necesidad de salir de Perl. Aunque tres una buena idea también.
Ehtesh Choudhury
3
brew install findutilsy gxargsfue exactamente lo que necesitaba en OS X, gracias.
Brad Koch
5
Con Bash, generalmente prefiero evitar los xargs para cualquier cosa que sea un poco complicada, a favor de los bucles while-read. Para su pregunta, while read -ar LINE; do ...; donehace el trabajo (recuerde usar la sintaxis de matriz con LINE, por ejemplo, ${LINE[@]}para toda la línea). Esto no necesita ningún truco: de forma predeterminada, la lectura se usa \ncomo el carácter del terminador de línea.
Debería publicar una pregunta en SO sobre los pros y los contras de xargs versus bucles while-read ... ¡listo!
Esto solo puede emular xargs -n1 -d'\n', y no todo xargs.
Hola Mundo,
@HelloWorld: puede agrupar argumentos con la suficiente facilidad, por lo que también puede simular xargs -n$Ncon solo un poco de secuencias de comandos adicionales.
Charles Stewart,
Sí, estoy entre los votantes, es solo un comentario que vale la pena mencionar.
Hola Mundo,
¡Esto es exactamente lo que hago! Además, puede usar las readopciones, como leer más palabras en variables separadas o cambiar el delimitador con IFS=' '.
caesarsol
0
No con la versión estándar. Tengo una versión pirateada que hace eso, la usé antes de saber ' find ... -print0 | xargs -0 ...'. Contáctame si quieres una copia. Mira mi perfil. (Sin ciencia de cohetes, sin embargo, casi hace el trabajo. No es una réplica completa de xargs).
Si filecontiene espacios y líneas nuevas, entonces el resultado de este comando hará que sea imposible distinguirlos, lo que parece ir en la dirección opuesta a lo que esta pregunta pide
find -print0 -name \*.foo -maxdepth 1 | xargs -0 -P4
es demasiado para escribir en comparación conls *.foo | xargs -P4
.Respuestas:
Algo en la línea de
Deberia trabajar.
fuente
tr '\n' '\0'
también funcionatr
Es más rápido tanto para la CPU como para los dedos.GNU xargs (predeterminado en Linux; instalar
findutils
desde MacPorts en OS X para obtenerlo) admite lo-d
que le permite especificar un delimitador personalizado para la entrada, para que pueda hacerfuente
alias xxargs="xargs -d '\n'"
en mi bashrc. Así que puedo hacer cosas como esta:grep -IRl foo | xxargs sed -i s/foo/bar/g
tr
es una buena idea también.brew install findutils
ygxargs
fue exactamente lo que necesitaba en OS X, gracias.Con Bash, generalmente prefiero evitar los xargs para cualquier cosa que sea un poco complicada, a favor de los bucles while-read. Para su pregunta,
while read -ar LINE; do ...; done
hace el trabajo (recuerde usar la sintaxis de matriz con LINE, por ejemplo,${LINE[@]}
para toda la línea). Esto no necesita ningún truco: de forma predeterminada, la lectura se usa\n
como el carácter del terminador de línea.Debería publicar una pregunta en SO sobre los pros y los contras de xargs versus bucles while-read ... ¡listo!
fuente
xargs -n1 -d'\n'
, y no todoxargs
.xargs -n$N
con solo un poco de secuencias de comandos adicionales.read
opciones, como leer más palabras en variables separadas o cambiar el delimitador conIFS=' '
.No con la versión estándar. Tengo una versión pirateada que hace eso, la usé antes de saber '
find ... -print0 | xargs -0 ...
'. Contáctame si quieres una copia. Mira mi perfil. (Sin ciencia de cohetes, sin embargo, casi hace el trabajo. No es una réplica completa de xargs).fuente
¿Qué pasa con
cat file | xargs | sed 's/ /\n/ig'
esto? Convertir espacios en nuevas líneas, utilizando herramientas estándar de bash de Linux.fuente
file
contiene espacios y líneas nuevas, entonces el resultado de este comando hará que sea imposible distinguirlos, lo que parece ir en la dirección opuesta a lo que esta pregunta pide