Aus irgendeinem Grund kann ich nicht scheinen, um eine einfache Antwort auf diese zu finden, und ich bin auf ein bisschen von einem Zeitdruck im Moment. Wie würde ich eine Auswahlzeile nach der ersten Zeile einfügen, die einer bestimmten Zeichenkette entspricht, wenn ich den Befehl "sed" verwende. Ich habe ...
CLIENTSCRIPT="foo"
CLIENTFILE="bar"
Und ich möchte eine Zeile nach der Zeile CLIENTSCRIPT=
einfügen, die zu ...
CLIENTSCRIPT="foo"
CLIENTSCRIPT2="hello"
CLIENTFILE="bar"
Versuchen Sie, dies mit GNU sed zu tun:
sed '/CLIENTSCRIPT="foo"/a CLIENTSCRIPT2="hello"' file
wenn Sie in-place ersetzen wollen, verwenden Sie
sed -i '/CLIENTSCRIPT="foo"/a CLIENTSCRIPT2="hello"' file
CLIENTSCRIPT="foo"
CLIENTSCRIPT2="hello"
CLIENTFILE="bar"
\a
(anhängen)Beachten Sie die Standard-"sed"-Syntax (wie in POSIX, also unterstützt von allen konformen "sed"-Implementierungen (GNU, OS/X, BSD, Solaris...)):
sed '/CLIENTSCRIPT=/a\
CLIENTSCRIPT2="hello"' file
Oder in einer Zeile:
sed -e '/CLIENTSCRIPT=/a\' -e 'CLIENTSCRIPT2="hello"' file
(-e
-Ausdrücke (und der Inhalt von -f
-Dateien) werden mit Zeilenumbrüchen verbunden, um das sed-Skript zu bilden, das sed
interpretiert).
Die Option -i
für In-Place-Editing ist ebenfalls eine GNU-Erweiterung, einige andere Implementierungen (wie die von FreeBSD's) unterstützen -i ''
dafür.
Alternativ können Sie aus Gründen der Portabilität stattdessen perl
verwenden:
perl -pi -e '$_ .= qq(CLIENTSCRIPT2="hello"\n) if /CLIENTSCRIPT=/' file
Oder Sie könnten ed
oder ex
verwenden:
printf '%s\n' /CLIENTSCRIPT=/a 'CLIENTSCRIPT2="hello"' . w q | ex -s file
Ich hatte eine ähnliche Aufgabe und war nicht in der Lage, die obige Perl-Lösung zum Laufen zu bringen.
Hier ist meine Lösung:
perl -i -pe "BEGIN{undef $/;} s/^\[mysqld\]$/[mysqld]\n\ncollation-server = utf8_unicode_ci\n/sgm" /etc/mysql/my.cnf
Erläuterung:
Verwendet einen regulären Ausdruck, um nach einer Zeile in meiner /etc/mysql/my.cnf-Datei zu suchen, die nur [mysqld]
enthielt, und ersetzt sie durch
[mysqld] collation-server = utf8_unicode_ci
ersetzt.
Damit fügte ich die Zeile "collation-server = utf8_unicode_ci" nach der Zeile mit "mysqld" ein.