Ich möchte cat mit Platzhaltern in bash verwenden, um mehrere kleine Dateien (jede Datei besteht aus einem Satz) in die Standardausgabe zu drucken. Der separate Dateiinhalt wird jedoch nicht durch einen Zeilenumbruch getrennt, den ich zur besseren Lesbarkeit verwenden möchte.
Wie kann ich diesem Befehl einen Dateibegrenzer hinzufügen?
in "$@"
- es ist implizit.Verwenden Sie einfach eine Schleife anstelle von einfach
cat
:quelle
Wenn Sie einen Dateinamen zwischen Dateien wünschen, verwenden Sie
tail
:(Falls Sie
tac
stattdessen möchtencat
, haben einigetail
Implementierungen die-r
Option für eine gleichwertigetac
Funktion.)quelle
Das wird funktionieren:
Sie benötigen keine Shell-Schleifen oder
\n
ähnliches , und dies folgt immer der Ausgabe einer Datei mit einer Ewline - mit Ausnahme der allerletzten.Andernfalls könnte dies funktionieren, wenn zwischen den Ausgaben jeder Datei eine leere Zeile ausgegeben werden soll:
\n
Dies folgt immer der Ausgabe einer Datei mit einer Ewline und einer zusätzlichen Leerzeile .Sie können es so nennen:
quelle
for n in 1 2 3; do printf "$n" >"$n"; done; sed '' -- [123]
sed
muss immer eine\n
Ewline drucken, bevor etwas anderes gedruckt wird. In der letzten Zeile der letzten Datei wird jedoch möglicherweise keine\n
Ewline angehängt. Ich könnte schwören, dass ich diese Frage schon einmal beantwortet habe.1\n2\n3
. Es klappt. das tut es immer. Was druckt es für Sie?\n
in RHS ist nicht Standard. Sie können verwendensed -e '$G'
.Ähnlich wie bei @terdons Antwort können Sie den folgenden
head
Befehl verwenden , wenn Sie den Dateinamen auch in Zukunft bevorzugen.head
Der Standardwert sind die ersten 10 Zeilen. Daher ist die Verwendung ohne Befehlsoptionen für Ihren Fall (ein Satz pro Datei) vollkommen in Ordnung. Andernfalls benötigen Sie die-n X
Option.quelle
Eine andere Möglichkeit - verwenden Sie
grep -h
diese Option, um einfach in jeder Datei nach der leeren Zeichenfolge zu suchen. Dies entspricht allen Zeilen, unabhängig davon, wie viele oder ob Zeilenumbrüche abgeschlossen sind oder nicht. grep-Ergebnisse werden immer mit Zeilenumbruch beendet. Die-h
Option unterdrückt das Präfixieren jeder Ausgabezeile mit dem Dateinamen, von dem sie stammt:Oder Sie können GNU
paste
im-s
Erial-Modus mit Newline als Trennzeichen verwenden:quelle