2017-02-16 16 views
0

Ich würde gerne die genauen Wörter unter grep und ersetzen sie rekursiv aus dem aktuellen Verzeichnis.ersetzen bestimmtes Wort in einer Zeile

BEDINGUNGEN

  • plan => service_plan
  • Plan => ServicePlan

Auch wenn sie in einer Mitte eines Satzes lebt, es muss auch ersetzt werden.

  • abc_plan => abc_service_plan
  • AbcPlan => AbcServicePlan

Außer diesen beiden Wörtern.

  • Stripe::Plan x
  • x

versuchte ich

grep -l 'plan' ./* | xargs sed -i.bak -e 's/plan/service_plan/g'

Aber ich bin nicht sicher, wie ich ausschließen konnte und schließen einige Worte mehr.

Es wäre wirklich zu schätzen, wenn Sie Erklärungen für eine Option des spezifischen Befehls hinzufügen!

+0

Was haben Sie bisher versucht zu tun? Jede Richtung, die Sie versucht haben und fehlgeschlagen? Schreibe deinen Code auf –

+0

* einige Wörter * bedeuten einige exakte Wörter. Kannst du es ihnen zeigen? – RomanPerekhrest

+0

ja einige genaue workds – Tosh

Antwort

1

Ihr Suchmuster erfordert die Verwendung eines negativen Lookbehind Regex. Leider Standard-Shell-Dienstprogramme z. sed, awk unterstützen Lookhind Regex nicht. Ich schlage vor, mit perl mit find (für rekursive Suche):

find . -type f -exec \ 
perl -i -pe 's/(?<!stripe_)plan/service_$&/g; s/(?<!Stripe::)Plan/Service$&/g' {} + 

Details on lookahead and lookbehind in regex

+0

Danke! Übrigens, was ist Lookbehind Regex? – Tosh

+0

'(? anubhava

Verwandte Themen