Ersetzen Sie mithilfe der Zeilennummer eine ganze Zeile durch eine andere Zeile, die den Dateipfad enthält

Ersetzen Sie mithilfe der Zeilennummer eine ganze Zeile durch eine andere Zeile, die den Dateipfad enthält

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, $resultwerden also erweitert und sedmelden wahrscheinlich einen unvollendeten sBefehl.

Verwenden Sie stattdessen ein anderes Trennzeichen für den sBefehl. 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'

sBei beiden cBefehlen 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 rBefehlen

$ 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'

verwandte Informationen