software - Combinando eco y gato en Unix
que es pipeline software (6)
Pregunta realmente simple, ¿cómo combino echo y cat en el intérprete de comandos, estoy tratando de escribir el contenido de un archivo en otro archivo con una cadena antes de que aparezca?
Si / tmp / file se ve así:
this is a test
Quiero ejecutar esto:
echo "PREPENDED STRING"
cat /tmp/file | sed ''s/test/test2/g'' > /tmp/result
para que / tmp / result tenga el siguiente aspecto:
PREPENDED STRINGthis is a test2
Gracias.
Esto debería funcionar:
echo "PREPENDED STRING" | cat - /tmp/file | sed ''s/test/test2/g'' > /tmp/result
O simplemente usa solo sed
sed -e ''s/test/test2/g
s/^/PREPEND STRING/'' /tmp/file > /tmp/result
O también:
{ echo "PREPENDED STRING" ; cat /tmp/file | sed ''s/test/test2/g'' } > /tmp/result
Otra opción: suponiendo que la cadena antepuesta solo debería aparecer una vez y no para cada línea:
gawk ''BEGIN {printf("%s","PREPEND STRING")} {gsub(/test/, "&2")} 1'' in > out
Tratar:
(printf "%s" "PREPENDED STRING"; sed ''s/test/test2/g'' /tmp/file) >/tmp/result
Los paréntesis ejecutan los comandos dentro de una subcadena, de modo que la salida se vea como una sola secuencia para el redireccionamiento >/tmp/result
.
Si esto es alguna vez para enviar un correo electrónico, recuerde usar terminaciones de línea CRLF, así:
echo -e ''To: [email protected]/r'' | cat - body-of-message /
| sed ''s/test/test2/g'' | sendmail -t
Observe el -e -flag y el / r dentro de la cadena.
Configuración para: de esta manera en un bucle le proporciona el envío masivo de correo masivo simple del mundo.