it-swarm.com.de

So hängen Sie mehrere Zeilen an eine Datei an

Ich schreibe ein Bash-Skript, um nach einer Datei zu suchen, wenn sie nicht vorhanden ist. Erstellen Sie sie und hängen Sie sie an:

Host localhost
    ForwardAgent yes

Damit "line then new line 'tab' then text" Ich denke, es ist ein sensibles Format. Ich weiß, dass Sie dies tun können:

cat temp.txt >> data.txt

Aber es scheint seltsam seit seinen zwei Zeilen. Gibt es eine Möglichkeit, dies in diesem Format anzuhängen:

echo "hello" >> greetings.txt
346
TheLegend
# possibility 1:
echo "line 1" >> greetings.txt
echo "line 2" >> greetings.txt

# possibility 2:
echo "line 1
line 2" >> greetings.txt

# possibility 3:
cat <<EOT >> greetings.txt
line 1
line 2
EOT

Wenn Sudo (andere Benutzerrechte) zum Schreiben in die Datei erforderlich ist, verwenden Sie Folgendes:

# possibility 1:
echo "line 1" | Sudo tee -a greetings.txt > /dev/null

# possibility 3:
Sudo tee -a greetings.txt > /dev/null <<EOT
line 1
line 2
EOT
604
Hauke Laging
printf '%s\n    %s\n' 'Host localhost' 'ForwardAgent yes' >> file.txt

Oder wenn es sich um eine wörtliche Registerkarte handelt, die Sie möchten (und nicht um die vier Leerzeichen in Ihrer Frage):

printf '%s\n\t%s\n' 'Host localhost' 'ForwardAgent yes' >> file.txt

Sie können den gleichen Effekt mit echo erzielen, aber genau wie unterschiedlich von Implementierung zu Implementierung, während printf konstant ist.

64
evilsoup
echo -e "Hello \nWorld \n" >> greetings.txt
42
kendotwill

Ein anderer Ansatz ist die Verwendung von tee

tee -a ~/.ssh/config << END
Host localhost
  ForwardAgent yes
END

Einige Auswahlzeilen aus der Manpage von tee:

Das Dienstprogramm tee kopiert die Standardeingabe in die Standardausgabe und erstellt eine Kopie in null oder mehr Dateien.

-a - Hängt die Ausgabe an die Dateien an, anstatt sie zu überschreiben.

22
user206934

SED kann eine Zeile wie folgt an das Ende einer Datei anhängen:

sed -i '$ a text to be inserted' fileName.file
$ wählt das Dateiende aus, das a weist es an, es anzuhängen, und danach kommt der Text, der eingefügt werden soll. Dann natürlich den Dateinamen.


Quelle: http://www.yourownlinux.com/2015/04/sed-command-in-linux-append-and-insert-lines-to-file.html

========== BEARBEITEN ============

Hat dieser Ansatz einen zusätzlichen Nutzen als andere Lösungen?
Ja, dieser Ansatz hat den zusätzlichen Vorteil, dass Dateien, die bei einer Suche zurückgegeben werden, wie folgt angehängt werden: find . -name "*.html" -exec sed -i '$ a </html>' {} \;

Ich habe das obige Beispiel verwendet, um das End-HTML-Tag, das auf jeder HTML-Seite fehlte, in eine Reihe von Verzeichnissen einzufügen.

===================================

6
OB7DEV

Hier ist ein Beispiel zum Anhängen mehrerer Zeilen in einer Datei:

{
        echo '  directory "/var/cache/bind";'
        echo '  listen-on { 127.0.0.1; };'
        echo '  listen-on-v6 { none; };'
        echo '  version "";'
        echo '  auth-nxdomain no;'
        echo '  forward only;'  
        echo '  forwarders { 8.8.8.8; 8.8.4.4; };'
        echo '  dnssec-enable no;'
        echo '  dnssec-validation no;'
} >> your_file.txt
3
user2753331

Ich habe sed verwendet, weil es mit Sudo verwendet werden kann. Zum Beispiel:

Sudo sed -i '$ a text to be inserted' fileName.file 

die Alternative ist sehr hässlich wie:

Sudo bash -c "echo a text to be inserted >> fileName.file"  

und noch hässlicher, wenn mit ssh fertig.

1
Fred Mehrdad

Man kann cat >> out.txt Entweder mit Perl oder Python] emulieren, um den gleichen Effekt zu erzielen. Perl:

Perl -e 'open(fh,">>","./out.txt");while(<>){printf(fh "%s",$_)};close(fh);'

Und Python:

python -c 'import sys;f=open(sys.argv[1],"a");l=[i for i in sys.stdin];f.write("".join(l))' out.txt 

Beachten Sie, dass Sie für python] drücken müssen Ctrl+D zweimal. Siehe verwandte Frage zum Stackoverflow für weitere Informationen.

1

Ein weiterer Einzeiler ist:

echo "Greetings 1" >> greetings.txt && echo "Greetings 2" >> greetings.txt

Ich würde das -e Option dachte, da es mehr Kontrolle gibt:

echo -e "Greeting 1\nGreetings 2\n" >> greetings.txt
1
Erdal G.

Zusätzlich zur Hauptantwort funktioniert das Hinzufügen von Sudo vor echo nicht, falls die Datei Superuser-Berechtigungen benötigt.

Dies liegt daran, dass Shell die Befehle unterbricht und zwar echo als root ausgeführt wurde, aber >> lief mit normalen Berechtigungen.

Dies funktioniert für Superuser: Sudo su -c "echo 'Line 3' >> greetings.txt"

0
SJ00