Mit sed ein neues Zeilenzeichen in eine Textdatei einfügen

Mit sed ein neues Zeilenzeichen in eine Textdatei einfügen

Ich möchte der Datei Folgendes hinzufügen /etc/securettymit sed:

pts/0
pts/1
pts/2
pts/3
pts/4
pts/5
pts/6
pts/7
pts/8
pts/9

Dazu habe ich folgenden Befehl geschrieben:

sed -i '$a pts/0\\npts/1\\npts/2\\npts/3\\npts/4\\npts/5\\npts/6\\npts/7\\npts/8\\npts/9' /etc/securetty

was mir die Ausgabe gibt:

pts/0\npts/1\npts/2\npts/3\npts/4\npts/5\npts/6\npts/7\npts/8\npts/9

Hier übersehe ich eindeutig etwas. Was könnte an meinem sedBefehl falsch sein?

Antwort1

EinfachHülseAnsatz:

for i in {0..9}; do echo "pts/"$i; done >> /etc/securetty

>>- um die Ausgabe an die Datei anzuhängen

>- um die Ausgabe in die Datei zu leiten (Überschreiben)

Antwort2

Übrigens, wenn Sie an dieEndeeiner bestehenden Datei so etwas wie das hier, Sie brauchen weder sed noch eine Shell-Schleife. Es ist nur ein Befehl:

$ printf '%s\n' "pts/"{0..10} >> /etc/securetty

Wenn Sie in dasAnfangder Datei können Sie dies immer noch mit printf tun:

$ cat file1
europe|EU
australia|AU
china|CN
$ printf '%s\n%s\n' "pts/"{0..10} "$(<file1)"
pts/0
pts/1
pts/2
pts/3
pts/4
pts/5
pts/6
pts/7
pts/8
pts/9
pts/10
europe|EU
australia|AU
china|CN

Sie können den Inhalt Ihrer Datei /etc/securettyfolgendermaßen ersetzen ( sed -idas erledigt im Hintergrund sogar genau das Gleiche):

$ printf '%s\n%s\n' "pts/"{0..10} "$(</etc/securetty)" > tmpsecure && mv -f tmpsecure /etc/securetty

Alternative:

$ { printf '%s\n' "pts/"{0..10}; cat /etc/securetty; } > tmpsecure && mv -f tmpsecure /etc/securetty
# Or
# cat <(printf '%s\n' "pts/"{0..10}) /etc/securetty > tmpsecure && mv tmpsecure /etc/securetty

Antwort3

Es sollte sein:

sed -i 'a pts/0\npts/1\npts/2\npts/3\npts/4\npts/5\npts/6\npts/7\npts/8\npts/9' /etc/securetty

Alternativ können Sie den Inhalt in eine Datei einfügen und die read (r)Option von sed zum Anhängen an die Zieldatei verwenden.

Beispiel:

$ cat input.txt
pts/0
pts/1
pts/2
pts/3
pts/4
pts/5
pts/6
pts/7
pts/8
pts/9

$ cat /etc/securetty
This is a dummy file

Befehl:

sed -i 'r input.txt' /etc/securetty

Die Datei /etc/securettywird wie folgt geändert:

$ cat /etc/securetty
This is a dummy file
pts/0
pts/1
pts/2
pts/3
pts/4
pts/5
pts/6
pts/7
pts/8
pts/9

verwandte Informationen