2013-02-14 4 views
6

Ich versuche zu cat einige Dateien zusammen, während gleichzeitig etwas Text zwischen den Dateien hinzufügen. Ich bin ein Unix-Neuling und ich habe die Syntax nicht im Griff.Wie man literalen Text zum Unix 'cat' Befehl hinzufügt

Hier ist mein gescheiterter Versuch:

cat echo "# Final version (reflecting my edits)\n\n" final.md echo "\n\n# The changes I made\n\n" edit.md echo "\n\n#Your original version\n\n" original.md > combined.md 

Wie kann ich dieses Problem beheben? Sollte ich Rohre oder etwas verwenden?

Antwort

5

Wenn ich Sie zu verstehen, sollte es so etwas wie sein:

echo "# Final version (reflecting my edits)\n\n" >> combined.md 
cat final.md >> combined.md 
echo "\n\n# The changes I made\n\n" >> combined.md 
cat edit.md >> combined.md 

Und so weiter.

+0

Ja! Vielen Dank! – incandescentman

4

Verfahren Substitution scheint zu funktionieren:

$ cat <(echo 'FOO') foo.txt <(echo 'BAR') bar.txt 
FOO 
foo 
BAR 
bar 

Sie können auch Befehl Substitution innerhalb einer hier Dokument verwenden.

$ cat <<EOF 
FOO 
$(< foo.txt) 
BAR 
$(< bar.txt) 
EOF 
+0

Sie können Befehlssubstitutionen in das Here-Dokument einbetten, wenn Sie FOO nicht in Anführungszeichen setzen. – chepner

+0

@chepner Gut zu wissen, aber wie würde ich es hier benutzen? –

+0

Ich habe deine Frage ziemlich stark bearbeitet; Ich glaube nicht, dass Sie hier-Strings mit anderen Dateiargumenten zu "cat" kombinieren können (in meinem Test werden die here-Strings ignoriert). – chepner

6

eine Befehlsgruppe Verwenden Sie die Ausgabe in einen Stream zu fusionieren:

{ 
    echo -e "# Final version (reflecting my edits)\n\n" 
    cat final.md 
    echo -e "\n\n# The changes I made\n\n" 
    cat edit.md 
    echo -e "\n\n#Your original version\n\n" 
    cat original.md 
} > combined.md 

Es gibt Tricks, die Sie mit Prozess-Substitution und Befehlsersetzung (siehe Lev Levitsky Antwort) spielen kann alles mit einem zu tun Befehl (anstelle der separaten cat Prozesse verwendet hier), aber dies sollte effizient genug sein mit so wenigen Dateien.

+0

großartige Option zu vermeiden, wiederholt die gleiche Ausgabedatei angeben zu müssen – erjoalgo