350 Stimmen

Öffnen und Schreiben von Daten in eine Textdatei mit der Bash?

Wie kann ich mit einem Shell-Skript unter Linux automatisch Daten in eine Textdatei schreiben?

Ich konnte die Datei öffnen. Ich weiß jedoch nicht, wie ich Daten in die Datei schreiben kann.

18voto

Marat Punkte 319

Mir gefällt diese Antwort:

cat > FILE.txt <<EOF

info code info 
...
EOF

würde aber vorschlagen cat >> FILE.txt << EOF wenn Sie einfach etwas am Ende der Datei hinzufügen möchten, ohne das Bestehende zu löschen

Zum Beispiel so:

cat >> FILE.txt <<EOF

info code info 
...
EOF

11voto

lukaserat Punkte 4414

Verschiebung meines Kommentars als Antwort, wie von @lycono gewünscht

Wenn Sie dies mit Root-Rechten tun müssen, gehen Sie folgendermaßen vor:

sudo sh -c 'echo "some data for the file" >> fileName'

11voto

tripleee Punkte 155951

Für Umgebungen, in denen diese Dokumente nicht verfügbar sind ( Makefile , Dockerfile usw.) können Sie oft verwenden printf für eine einigermaßen lesbare und effiziente Lösung.

printf '%s\n' '#!/bin/sh' '# Second line' \
    '# Third line' \
    '# Conveniently mix single and double quotes, too' \
    "# Generated $(date)" \
    '# ^ the date command executes when the file is generated' \
    'for file in *; do' \
    '    echo "Found $file"' \
    'done' >outputfile

10voto

topher217 Punkte 968

Ich dachte, es gäbe einige sehr gute Antworten, aber keine prägnante Zusammenfassung aller Möglichkeiten; also:

Der Kerngedanke hinter den meisten Antworten hier ist Nachsendung . Zwei sind wichtige Umleitungsoperatoren für das Schreiben in Dateien:

Umleitung der Ausgabe:

echo 'text to completely overwrite contents of myfile' > myfile

Umgeleitete Ausgabe anhängen

echo 'text to add to end of myfile' >> myfile

Hier Dokumente

Andere erwähnten, eher als von einer festen Eingangsquelle wie echo 'text' Sie können auch über ein "Here Document" interaktiv in Dateien schreiben, die auch in dem Link zum Bash-Handbuch oben beschrieben sind. Diese Antworten, z.B.

cat > FILE.txt <<EOF` or `cat >> FILE.txt <<EOF

verwenden die gleichen Umleitungsoperatoren, fügen aber über "Here Documents" eine weitere Ebene hinzu. In der obigen Syntax schreiben Sie in die FILE.txt über die Ausgabe von cat . Das Schreiben erfolgt erst, nachdem der interaktiven Eingabe eine bestimmte Zeichenkette übergeben wurde, in diesem Fall "EOF", aber dies könnte eine beliebige Zeichenkette sein, z. B.:

cat > FILE.txt <<'StopEverything'` or `cat >> FILE.txt <<'StopEverything'

würde genauso gut funktionieren. Hier suchen die Dokumente auch nach verschiedenen Begrenzungszeichen und anderen interessanten Parsing-Zeichen, also schauen Sie in die Dokumentation, um weitere Informationen zu erhalten.

Hier Streicher

Es ist etwas kompliziert und eher eine Übung im Verständnis der Syntax von Here-Dokumenten und der Umleitung, aber man kann die Syntax von Here-Dokumenten mit den Standard-Umleitungsoperatoren kombinieren, um eine Here-Zeichenkette zu erhalten:

Umleitung der Ausgabe einer Katzen-Eingabe

cat > myfile <<<'text to completely overwrite contents of myfile'

Umgeleitete Ausgabe von cat Input anhängen

cat >> myfile <<<'text to completely overwrite contents of myfile'

1voto

bhargav3vedi Punkte 194

Wenn Sie Variablen verwenden, können Sie

first_var="Hello"
second_var="How are you"

Wenn Sie beide Strings zusammenfügen und in eine Datei schreiben möchten, verwenden Sie Folgendes

echo "${first_var} - ${second_var}" > ./file_name.txt

Ihr file_name.txt Inhalt: "Hallo - Wie geht's"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X