Quiero encontrar un comando bash que me permita grep cada archivo en un directorio y escribir la salida de ese grep en un archivo separado. Supongo que habría sido hacer algo como esto
ls -1 | xargs -I{} "grep ABC '{}' > '{}'.out"
pero, que yo sepa, a xargs no le gustan las comillas dobles. Sin embargo, si elimino las comillas dobles, el comando redirige la salida del comando completo a un solo archivo llamado '{}'. En lugar de a una serie de archivos individuales.
¿Alguien sabe de una manera de hacer esto usando xargs? Acabo de usar este escenario grep como ejemplo para ilustrar mi problema con xargs, por lo que cualquier solución que no use xargs no es tan aplicable para mí.
xargs
sin-0
: esto solo se aplica cuando se canalizafind
la salida conxargs
, ¿verdad? cuando lo haga, ¿xargs -a <input_file>
cómo usaría esto? La mayoría de los comandos tienen gusto degrep
salidas con\n
y no.\0.
La única forma en que puedo pensartr
para solucionar esto es usar de nuevo para arreglar eso tal vez. Pero, ¿por qué es importante usarlo solo con-0
?-0
,xargs
tomará tus nombres de archivo y romperá todos los espacios, comillas y barras invertidas en ellos. Deberías olvidartexargs
como una herramienta. Si tiene líneas, use un bucle bash para iterar las líneas:,while read line; do <command> "$REPLY"; done < file-with-lines
ocommand | while ...
xargs
son GNU),xargs
debe evitarse a menos que uno pueda usarlo-0
. Gracias.xargs
, que no siempre implica el análisisls
o el usosh -c
. Esto no responde la pregunta en lo más mínimo, pero es el primer resultado de Google para la pregunta, solo que aumenta la confusión.xargs -I{} sh -c 'grep ABC "$1" > "$1.out"' -- {}
? Especialmente, las reglas de comillas (dobles) incrustadas y el símbolo "-" al final. GraciasUna solución sin
xargs
es la siguiente:... y el mismo se puede hacer con
xargs
, resulta que:Editar : comillas simples agregadas después del comentario de lhunath .
fuente
Supongo que su ejemplo es solo un ejemplo y que puede necesitar> para otras cosas. GNU Parallel http://www.gnu.org/software/parallel/ puede ser su rescate. No necesita comillas adicionales siempre que sus nombres de archivo no contengan \ n:
Si tiene nombres de archivo con \ n:
Como una ventaja adicional, obtiene los trabajos ejecutados en paralelo.
Mire los videos de introducción para obtener más información: http://pi.dk/1
La instalación de 10 segundos intentará hacer una instalación completa; si eso falla, una instalación personal; si eso falla, una instalación mínima:
Si necesita moverlo a un servidor, que no tiene GNU Parallel instalado, intente
parallel --embed
.fuente