Wie immer in Unix gibt es Optionen.
paste
Verwenden Sie das paste
Dienstprogramm mit einer leeren LHS-Datei, zum Beispiel:
cat ~/.bashrc | paste /dev/null -
Der cat
Befehl ist ein Platzhalter für Ihr zweites Skript.
Der paste
Befehl 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/null
wie file1
und STDIN
wie von file2
angegeben zu verwenden -
. Bei Verwendung als Eingabe werden /dev/null
NULL-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: paste
Hat eine --delimiter
Option, 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 paste
durchgestrichene 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 sed
oder 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 printf
dem Formatbezeichner von zwei Leerzeichen, gefolgt von der zu druckenden Zeichenfolge, gefolgt von einer neuen Zeile.
Denken Sie daran, dass alle oben genannten Befehle den cat
Teil der Pipeline eliminieren können , dh paste /dev/null ~/.bashrc
oder paste /dev/null ~/.bashrc|expand -2
, gleich sed 's/^/ /' ~/.bashrc
oder awk '{printf " %s\n",$0}' ~/.bashrc
. Es wird oft als Anfängerfehler gewertet, wenn es cat
zuerst in einer Pipeline verwendet wird.
cat ... | <command>
wopaste
,sed
undawk
alle nehmen einen Dateinamen als Argument. Kopf hängt in Schande Zu meiner Verteidigung die Antwort auf "Was habe ich gedacht?" zu sein scheint Klarheit , so dass der Dateiname immer an der gleichen Stelle ist je nachdem , was Alternative verwendet wird.