So kann man mit cat ganz einfach Dateien in bash zusammenfügen:
cat *.txt > all.txt
Was aber, wenn man etwas zwischen die Eingabedateien einfügen möchte, wie zum Beispiel einen Zeilenvorschub?
Benötigt GNU sed
:
sed -s '$G' *.txt > all.txt
Fügen Sie nach jeder Datei eine Zeile mit 8 Bindestrichen und eine neue Zeile hinzu
sed -s '$a--------' *.txt
Sie können Ihr sed '$ d' damit verwenden
Vergleichen Sie mit diesen:
Fügen Sie vor jeder Datei eine Zeile mit Bindestrichen ein:
sed -s '1i--------' *.txt
Machen Sie dasselbe, aber ohne Zeilenumbruch nach den Bindestrichen:
sed -s '1s/^/--------/' *.txt
Fügen Sie am Ende der letzten Zeile jeder Datei eine Zeile mit Bindestrichen ein:
sed -s '$s/$/--------/' *.txt
Umschließen Sie jede Datei mit geschweiften Klammern:
sed -s -e '1i{' -e '$a}' *.txt
sed -s '$a--------' *.txt
Füge nach jeder Datei eine Zeile mit 8 Bindestrichen und eine neue Zeile hinzu. Sie können Ihrsed '$d'
damit verwenden. Vergleichen Sie auf diese:sed -s '1i--------' *.txt
,sed -s '1s/^/--------/' *.txt
,sed -s '$s/$/--------/' *.txt
undsed -s -e '1i{' -e '$a}' *.txt
Als Einzeiler mit Unterschalen:
Die Subshell führt folgende Aktionen aus, die in Skriptzeilen unterteilt sind:
In diesem Beispiel verhält sich das Trennzeichen wie eine Fußzeile. Fügen Sie eine Überschrift hinzu, indem Sie eine andere
echo
vor der hinzufügencat
.quelle
for i in *.txt; do cat "$i"; echo 'stuff'; done > all.txt
files=(*.txt); indices=(${!files[@]}); for i in ${indices[@]}; do cat "${files[i]}"; if [[ $i != ${indices[@]: -1} ]]; then echo "separator"; fi; done > all.txt
catWithSep() { sep="$1"; shift; first=''; for f; do test -n "$first" && echo "$sep"; cat "$f"; first=no; done; }; catWithSep separator *.txt