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?
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?
Antworten:
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 Ihr sed '$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:
( for i in *.txt ; do cat $i ; echo 'separator here' ; done ) >all.txt
Die Subshell führt folgende Aktionen aus, die in Skriptzeilen unterteilt sind:
für i in * .txt tun cat $ i echo 'separator goes here' erledigt
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ügen cat
.
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