45 Stimmen

Interpretation als feste Zeichenkette/Literal und nicht als Regex mit sed

Para grep gibt es eine Option für feste Zeichenfolgen, -F ( fgrep ), um die Regex-Interpretation des Suchstrings zu deaktivieren. Gibt es eine ähnliche Möglichkeit für sed ? Ich konnte im Handbuch nichts finden. Eine Empfehlung für ein anderes Gnu/Linux-Tool wäre auch gut.

Ich benutze sed für die Funktion Suchen und Ersetzen: sed -i "s/abc/def/g"

0voto

Sorin Punkte 4967
perl -i.orig -pse  'while (($i = index($_,$s)) >= 0) { substr($_,$i,length($s), $r)}'--\ 
     -s='$_REQUEST['\'old\'']' -r='$_REQUEST['\'new\'']' sample.txt
  • -i.orig In-Place-Änderung mit Backup.
  • -p Zeilen aus der Eingabedatei standardmäßig drucken
  • -s rudimentäres Parsing von Befehlszeilenargumenten ermöglichen
  • -e dieses Skript ausführen
  • index($_,$s) Suche nach dem $s
  • substr($_,$i,length($s), $r) die Zeichenfolge ersetzen
  • while (($i = index($_,$s)) >= 0) wiederholen bis
  • -- Ende der Perl-Parameter
  • -s='$_REQUEST['\'old\'']' , -r='$_REQUEST['\'new\'']' - gesetzt $s , $r

Sie müssen immer noch "entkommen" ' Zeichen, aber der Rest sollte kein Problem sein.

Anmerkung: Dies begann als Antwort auf Wie übergibt man Sonderzeichen an sed daher die $_REQUEST['old'] Saiten, aber diese Frage ist etwas treffender formuliert.

-5voto

Brian Clements Punkte 3619

Sie sollten Folgendes verwenden replace 代わりに sed .

Aus der Manpage:

   The replace utility program changes strings in place in files or on the
   standard input.

   Invoke replace in one of the following ways:

       shell> replace from to [from to] ... -- file_name [file_name] ...
       shell> replace from to [from to] ... < file_name

   from represents a string to look for and to represents its replacement.
   There can be one or more pairs of strings.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X