2017-12-12 16 views
1

ich eine Datei, die ich zur Zeit als E-Mailumleiten sed Ausgabe an stdin

/usr/sbin/sendmail [email protected] < f1.txt 

Ich habe einige Änderungen an der Datei senden, wie so so, dass es einen Platzhalter enthält, die ich wie so

sed Einstellung mit
sed -e s/PLACEHOLDER/TEST/g f1.txt 

Wie kann ich die 2 kombinieren? Ich dachte, es wäre wie

/usr/sbin/sendmail [email protected] <(sed -e s/PLACEHOLDER/TEST/g f1.txt) 

Aber das 'hängt'. Kann mir jemand in die richtige Richtung zeigen?

+4

Erfahren Sie mehr über * Rohre *. –

+1

Um fair zu sein, ist eine Prozesssubstitution * (im Grunde genommen) eine Röhre, unter der Haube. – chepner

Antwort

7

Sie haben es fast schon.

Ihre Befehlszeile war:

/usr/sbin/sendmail [email protected] <(sed -e s/PLACEHOLDER/TEST/g f1.txt) 

Sie Process Substitution mit der Sed-Befehl an die Innenseite der <(..) in eine temporäre Datei-Handle konstruieren, die von Sendmail gelesen wird. Leider leiten Sie von diesem temporären Dateihandle nicht wirklich um.

Das Update sollte einfach sein, einen < vor dem Befehl Substitution hinzuzufügen:

/usr/sbin/sendmail [email protected] < <(sed -e 's/PLACEHOLDER/TEST/g' f1.txt) 
            ↑ 

Das heißt, es vorzuziehen sein könnte PIPES stattdessen zu verwenden, um die Abhängigkeit von bash zu vermeiden:

sed -e 's/PLACEHOLDER/TEST/g' f1.txt | /usr/sbin/sendmail [email protected] 

Der schließliche Effekt ist der gleiche, aber der Prozess ist ein wenig einfacher und portabel für POSIX-Shell-Interpreter, die keine Prozesssubstitution unterstützen.