2017-02-22 2 views
-1

Ich möchte unter Linux eine Zeichenkette zu einer bestimmten Zeilennummer hinzufügen. Ich suchte und fand einen Befehl wie:Hinzufügen einer Zeichenkette zur Datei unter einer bestimmten Zeilennummer

sed "5i helloworld" test.txt 

helloworld in Zeile 5 hinzufügen, aber ich habe einen Fehler:

sed: command garbled.

scheint Solaris unterstützt keine Option -i für sed. Ich teste hier in RedHat. Gibt es einen anderen Befehl, den ich hier benutzen kann? Irgendwelche anderen Möglichkeiten?

+1

Sind Sie Linux oder Solaris verwenden? – miken32

+0

@ miken32 Linux hier. – Richard

+0

Dann wird das, was Sie haben, funktionieren, und warum erwähnen Sie Solaris? – miken32

Antwort

2

Ältere Benutzer sind etwas wählerischer bei der Eingabe von Befehlen wie i, a und c. Versuchen Sie, eine tatsächliche Linie Fortsetzung:

sed '5i\ 
helloworld' test.txt 

Die i text Syntax eine GNU-Erweiterung ist. POSIX sed kennt nur die i\ Version mit linebreak.

Beachten Sie auch, dass es einen Unterschied zwischen dem Sed iBefehl (insert Text) und die -iOption (in-Place-Bearbeitung).


Or "Funktion".

+1

_Optional reading_: Um die terminologische Konversation zusammenzufassen: Sowohl die [_POSIX_ spec] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html) und die [_BSD_ Sed man page] (https://www.freebsd.org/cgi/man.cgi?query=sed§ion=&n=1) rufen Sie die Einheiten von Funktionen auf, die in Skripts verfügbar sind - wie z. B. "i" - eine _Funktion _ und eine _Instanz des Aufrufens_ einer solchen Einheit (der Name der Funktion plus ihre Argumente) ein _command_. Im Gegensatz dazu macht die Manpage von [_GNU_ Sed] (https://www.gnu.org/software/sed/manual/sed.html#Common-Commands) diese Unterscheidung nicht und _only_ verwendet den Begriff _command_. – mklement0

+0

Vielen Dank für Ihre Kommentare. Es funktioniert jetzt für mich. – Richard

0

Hier awk Lösung:

awk 'NR==5{1;print "Hey there this is new text added on line 5"}1' inputfile 
+0

Ich sehe Fehler: awk: Syntaxfehler in der Nähe von Linie 1 awk: Ausbrechen in der Nähe von Linie 1 – Richard

+0

@Richard das funktioniert gut für 'Awk-Version' GNU Awk 3.1.7'. Bist du sicher, dass es gleich oder höher ist? –

+0

Danke für Ihre Infos. Und ich sehe, ich habe auch gawk Befehl zur Verfügung. Mein Gawk ist GNU Awk 4.1.0, API: 1.0. Also ändere deinen Befehl zu gawk funktioniert für mich. Also Befehl --- gawk 'NR == 5 {1; drucken "Hey, das ist neuer Text in Zeile 5 hinzugefügt"} 1' Test --- funktioniert gut auf meinem Server. Ich sehe beide awk, gawk auf meinem Server. Nicht bemerkt, gähnen vorher. – Richard

Verwandte Themen