
Wie ersetze ich Old_String in einer Datei durch New_String?
Alter_String:
$result = $client->updateInventory("UpdateInventory.xml");Neuer_String:
$result = $client->updateInventory("/Desktop/new/UpdateInventory.xml");
Old_String in Zeile Nummer = 5 in einer Datei namens file1.txt
Was ich versucht habe:
sed '5s/.*/'$result = $client->updateInventory("/Desktop/new/UpdateInventory.xml");'/' Datei1.txt
Antwort1
Sie können den folgenden Befehl verwenden, um dasselbe zu erreichen
sed "5s:.*:'$'result = '$'client->updateInventory('/Desktop/new/UpdateInventory.xml');:g" filename | sed "s:'$':$:g" | tr "'" '"'
Antwort2
Entfernen Sie die inneren einfachen Anführungszeichen. Sie beenden die äußeren, $result
werden also erweitert und sed
melden wahrscheinlich einen unvollendeten s
Befehl.
Verwenden Sie stattdessen ein anderes Trennzeichen für den s
Befehl. Sie können fast alles anstelle des Schrägstrichs verwenden.
sed '5s_.*_$result = $client->updateInventory("/Desktop/new/UpdateInventory.xml");_' file1.txt
ist was Sie wollen.
Antwort3
Eine andere Möglichkeit besteht darin, einen Befehl zu verwenden c
, der die durch die Adresse angegebene(n) Zeile(n) löscht
$ seq 5 | sed '2c\
foobar'
1
foobar
3
4
5
$ # with GNU-sed, assuming \ is not first character
$ seq 5 | sed '2cfoobar'
s
Bei beiden c
Befehlen treten Probleme auf, wenn die Ersetzungszeichenfolge bestimmte Sonderzeichen enthält, zum Beispiel:
$ seq 3 | sed '2s/.*/abc&xyz/'
1
abc2xyz
3
$ seq 3 | sed '2cabc\tabc'
1
abc abc
3
Eine robuste Möglichkeit, dies zu handhaben, ist die Verwendung von r
Befehlen
$ echo 'foo&\t\n\1///\\xyz' > f1
$ seq 3 | sed -e '2rf1' -e '2d'
1
foo&\t\n\1///\\xyz
3
Antwort4
Mit dem Befehl awk können wir das Ergebnis ebenfalls erreichen
awk ‘NR==5 {gsub(".*","$result = $client->updateInventory(/Desktop/new/UpdateInventory.xml);",$0);print $0}' filename| sed 's/(/&"/g' | sed 's/)/"&/g'