2014-03-25 18 views
5

Ich frage mich, ob dies in Find-Befehl möglich ist. Ich versuche, alle spezifischen Dateien mit den folgenden Erweiterungen zu finden, danach wird es SED sein. Hier ist meine aktuelle Befehlsskript:Find Befehl mit Regex für mehrere Dateierweiterungen

find . -regex '.*\.(sh|ini|conf|vhost|xml|php)$' | xargs sed -i -e 's/%%MEFIRST%%/mefirst/g' 

leider, ich bin nicht so vertraut in regex aber so etwas wie das ist, was ich brauche.

+1

haben Sie überprüfen mit 'man find', dass Ihre Version von der Suche nach den' -regex' Option hat? Nicht alle tun. Sagst du, dass es nicht funktioniert. Sieht für mich OK aus, aber ich habe meine Systeme nicht "finden". "Regex", also kann ich nicht sicher sagen. Viel Glück. – shellter

+1

Hallo Shelter, ich habe es endlich verstanden! 'finden. -regex ". * \. \ (sh \ | ini \ | conf \ | vhost \ | xml \ | php \)" -print | xargs sed -i -e's/%% MEFIRST %%/mefirst/g'' Dieses Skript wählt alle Dateien mit den folgenden Erweiterungen aus: sh, ini, conf, vhost, xml, php und ersetzt den Text %% MEFIRST %% zuerst in den ausgewählten Dateien. – user3282191

+2

Sie können Ihre Antwort unten und nach ~ 48 Stunden posten, akzeptieren Sie Ihre eigene Antwort, für Rufpunkte hier auf S.O. Willkommen und viel Glück. – shellter

Antwort

4

ich in den Kommentaren sehen, dass Sie herausgefunden, wie es mit Standard find -regex RE zu entkommen, aber man kann auch eine Art von Regex angeben, die es ohne Fluchten unterstützt, ist es ein bisschen besser lesbar zu machen:

In GNU findutils (Linux):

find . -regextype posix-extended -regex '.*\.(sh|ini|conf|vhost|xml|php)$' | ... 

In FreeBSD:

find . -E -regex '.*\.(sh|ini|conf|vhost|xml|php)$' | ...