web-dev-qa-db-fra.com

Combinaison d'écho et de chat sous Unix

Question très simple, comment puis-je combiner écho et chat dans le shell, j'essaie d'écrire le contenu d'un fichier dans un autre fichier avec une chaîne préfixée?

Si/tmp/file ressemble à ceci:

this is a test

Je veux courir ceci:

echo "PREPENDED STRING"
cat /tmp/file | sed 's/test/test2/g' > /tmp/result 

de sorte que/tmp/result ressemble à ceci:

PREPENDED STRINGthis is a test2

Merci.

31
Dan

Cela devrait fonctionner:

echo "PREPENDED STRING" | cat - /tmp/file | sed 's/test/test2/g' > /tmp/result 
36
Douglas

Essayer:

(printf "%s" "PREPENDED STRING"; sed 's/test/test2/g' /tmp/file) >/tmp/result

Les parenthèses exécutent les commandes à l'intérieur d'un sous-shell, de sorte que la sortie ressemble à un flux unique pour la redirection >/tmp/result.

11
Greg Hewgill

Ou utilisez simplement sed

  sed -e 's/test/test2/g
s/^/PREPEND STRING/' /tmp/file > /tmp/result
2
Iacopo

S'il s'agit d'un jour pour l'envoi d'un courrier électronique, pensez à utiliser les fins de ligne CRLF, comme suit:

echo -e 'To: [email protected]\r' | cat - body-of-message \
| sed 's/test/test2/g' | sendmail -t

Notez le drapeau -e - et le\r à l'intérieur de la chaîne.

Paramétrer à: de cette façon, en boucle, vous obtenez le plus simple des envois de courrier en masse au monde.

1
kaleissin

Ou aussi:

{ echo "PREPENDED STRING" ; cat /tmp/file | sed 's/test/test2/g' } > /tmp/result
0
mathk

Une autre option: supposer que la chaîne préfixée ne doit apparaître qu'une seule fois et non pour chaque ligne

gawk 'BEGIN {printf("%s","PREPEND STRING")} {gsub(/test/, "&2")} 1' in > out
0
glenn jackman