Ich habe eine Datei foo
Ich möchte bearbeiten. Ich möchte alle Zeilen der Datei vor einem bestimmten Muster entsprechen sollte $node_(2)
Ersatzlinien in Datei vor Muster
$node_(0) set X_ 46.188445620285734
$node_(0) set Y_ 400.0
# $ns_ at 0.0 "$node_(0) setdest 46.188445620285734 400.0 0.0"
$ns_ at 4.230260628522046 "$node_(0) setdest 140.0 400.0 11.073898626729083"
$ns_ at 12.70167232749509 "$node_(0) setdest 140.0 293.81155437971427 11.073898626728642"
# $ns_ at 22.290747430998636 "$node_(0) setdest 140.0 293.81155437971427 0.0"
$ns_ at 24.512130351924498 "$node_(0) setdest 140.0 121.22627768528247 11.143254728766196"
$node_(1) set X_ 284.3754249089888
$node_(1) set Y_ 400.0
$ns_ at 0.0 "$node_(1) setdest 358.5058741786957 400.0 10.938908248230844"
# $ns_ at 6.776768539190925 "$node_(1) setdest 358.5058741786957 400.0 0.0"
$ns_ at 8.52331532068547 "$node_(1) setdest 400.0 400.0 11.27995015881709"
$ns_ at 12.201888828288247 "$node_(1) setdest 400.0 341.4941258213043 11.279950158817115"
# $ns_ at 17.388602719303435 "$node_(1) setdest 400.0 341.4941258213043 0.0"
$ns_ at 22.22922653365822 "$node_(1) setdest 400.0 141.4941258213043 11.258336966410015"
$node_(2) set X_ 270.0 //so basically here is the pattern match
$node_(2) set Y_ 293.0222761518543
.
.
.
Die Datei dann wie dieses usind
$node_(0) set X_ 10.0
$node_(0) set Y_ 10.0
$node_(1) set X_ 510.0
$node_(1) set Y_ 510.0
$node_(2) set X_ 270.0 //pattern and everything after it is left intact
$node_(2) set Y_ 293.0222761518543
.
.
.
Ich habe versucht, schauen ersetzen Sed
sed -i -e '/$node_(0)/,/$node_(2)/c\$node_(0)\ set X_ 10.0 \n$node_(0) set Y_ 10.0\n$node_(1) set X_ 510.0\n$node_(1) set Y_ 510.0' foo
aber Es entfernt die erste $node_(2)
Zeile vollständig. Außerdem ändert sich die Anzahl der Zeilen vor $node_(2)
für jede neue foo
Datei, so dass ich die Zeilen nicht jedes Mal zählen kann.
'' $ in einem regulären Ausdruck übereinstimmt Ende der Zeile, mögen Sie '\ $' oder '[$]' verwenden, um ein wörtliches Dollar-Zeichen übereinstimmen. – tripleee
Oh, ich glaube ich verstehe jetzt. Sie möchten alle Zeilen vor der ersten löschen, die Ihrem Muster entsprechen, und sie durch hartcodierte Zeilen ersetzen. Ich empfehle Ihnen, den Befehl sed ['r' zu verwenden (https://www.gnu.org/software/sed/manual/sed.html#index-r-_0028read-file_0029-command) (" Datei lesen "). –
@ BenjaminW. genau! Ich weiß schon, womit ich sie ersetze. Ich werde mir den Link ansehen, den Sie gepostet haben, und sehen, ob ich es zum Laufen bringen kann. – pengu1n