it-swarm.com.de

Wie kann ich einer Datei in einem Shell-Skript eine Zeile hinzufügen?

Ich möchte einer vorhandenen CSV-Datei eine Reihe von Kopfzeilen hinzufügen und diese bearbeiten. Wie kann ich das machen?

echo 'one, two, three' > testfile.csv

und ich möchte am Ende mit

column1, column2, column3
one,     two,     three

Das Ändern der anfänglichen CSV-Ausgabe liegt nicht in meiner Hand.

Jeder Standardbefehl reicht aus. Wichtig ist, dass die Datei an Ort und Stelle bearbeitet und die Zeile am Anfang der Datei eingefügt wird.

41
user4812

Dies fügt benutzerdefinierten Text am Anfang Ihrer Datei hinzu:

echo 'your_custom_escaped_content' > temp_file.csv
cat testfile.csv >> temp_file.csv
mv temp_file.csv testfile.csv
33
tunnuz

Um Ihre ursprüngliche Frage zu beantworten, gehen Sie wie folgt vor:

sed -i '1icolumn1, column2, column3' testfile.csv

Der Befehl "1i" weist sed an, in Zeile 1 den Text einzufügen.

Die Option -i bewirkt, dass die Datei "an Ort und Stelle" bearbeitet wird. Sie kann auch ein optionales Argument verwenden, um beispielsweise eine Sicherungsdatei zu erstellen

sed -i~ '1icolumn1, column2, column3' testfile.csv

würde die Originaldatei in "testfile.csv ~" behalten.

69
Matthew Crumley

Dies verwendet sed nicht, aber mit >> wird an eine Datei angehängt. Beispielsweise:

echo 'one, two, three' >> testfile.csv

Bearbeiten : Zum Voranstellen einer Datei versuchen Sie Folgendes:

echo "text"|cat - yourfile > /tmp/out && mv /tmp/out yourfile

Ich fand dies durch ein schnelles Google-Suche .

11
Scottie T

Soweit ich weiß, möchten Sie column1, column2, column3 Ihrem vorhandenen one, two, three Voranstellen.

Ich würde ed anstelle von sed verwenden, da sed auf die Standardausgabe und nicht in die Datei schreibt.

Der Befehl:

printf '0a\ncolumn1, column2, column3\n.\nw\n' | ed testfile.csv

sollte die Arbeit machen.

Perl -i Ist auch einen Blick wert.

8
mouviciel

sed ist zeilenbasiert, daher bin ich mir nicht sicher, warum Sie dies mit sed tun möchten. Das Paradigma verarbeitet mehr eine Zeile nach der anderen (Sie können auch die Anzahl der Felder in der CSV programmgesteuert ermitteln und Ihre Kopfzeile mit awk generieren). Warum nicht einfach

echo "c1, c2, ... " >> file
cat testfile.csv >> file

?

3
Steve B.

Fügen Sie in zwei Befehlen eine bestimmte Zeile am Anfang einer Datei hinzu:

cat <(echo "blablabla") input_file.txt > tmp_file.txt
mv tmp_file.txt input_file.txt
1
tflutre

Verwenden Sie Perl -i mit einem Befehl, der den Anfang von Zeile 1 durch das ersetzt, was Sie einfügen möchten (die .bk-Datei bewirkt, dass Ihre Originaldatei gesichert wird):

Perl -i.bk -pe 's/^/column1, column2, column3\n/ if($.==1)' testfile.csv  
1
Markus