Wie immer in Unix gibt es Optionen.
paste
Verwenden Sie das pasteDienstprogramm mit einer leeren LHS-Datei, zum Beispiel:
cat ~/.bashrc | paste /dev/null -
Der catBefehl ist ein Platzhalter für Ihr zweites Skript.
Der pasteBefehl soll zwei Dateien nehmen und zusammenfügen, zB:
$ paste file1 file2
file 1 line 1 <TAB> file 2 line 1
file 1 line two <TAB> file 2 line 2
file 1 line 3 <TAB> file 2 line iii
Die Art und Weise, wie ich es oben benutze, ist, /dev/nullwie file1und STDINwie von file2angegeben zu verwenden -. Bei Verwendung als Eingabe werden /dev/nullNULL-Zeichen zurückgegeben. Dies bedeutet, dass vor jeder Zeile von file2, der Ausgabe Ihres zweiten Skripts, NULL gefolgt von einem TAB-Zeichen steht.
Sie können noch weiter gehen: pasteHat eine --delimiterOption, aber die Angabe von zwei Leerzeichen führt nicht zu dem erwarteten Effekt: Trennzeichen 1 wird zwischen der ersten und der zweiten Spalte verwendet, Trennzeichen 2 wird zwischen der zweiten und der dritten Spalte verwendet und so weiter.
paste|expand
Um einen Einzug mit zwei Leerzeichen zu erhalten, würden Sie die pastedurchgestrichene Ebene erneut verwenden expand -2: Dadurch werden alle Tabulatoren in zwei Leerzeichen umgewandelt:
cat ~/.bashrc | paste /dev/null - | expand -2
Dies verhält sich genau so, wie Sie es angegeben haben.
sed oder awk
Ein weiterer Ansatz ist die Verwendung von sedoder awk:
cat ~/.bashrc | sed 's/^/ /'
Dadurch wird nach dem Zeilenanfang (" ^") gesucht und ein Leerzeichenpaar ersetzt oder wirklich eingefügt.
cat ~/.bashrc | awk '{printf " %s\n",$0}'
Dies nimmt jede vollständige Zeile (" $0") und formatiert sie mit printfdem Formatbezeichner von zwei Leerzeichen, gefolgt von der zu druckenden Zeichenfolge, gefolgt von einer neuen Zeile.
Denken Sie daran, dass alle oben genannten Befehle den catTeil der Pipeline eliminieren können , dh paste /dev/null ~/.bashrcoder paste /dev/null ~/.bashrc|expand -2, gleich sed 's/^/ /' ~/.bashrcoder awk '{printf " %s\n",$0}' ~/.bashrc. Es wird oft als Anfängerfehler gewertet, wenn es catzuerst in einer Pipeline verwendet wird.