2013-10-16 17 views
15

Ich versuche Grep wie ich von Linux gewohnt bin, mit all seinen erstaunlichen Funktionen und der ganzen Macht von RegEx, ... aber auf Mac OS X funktioniert es nicht so, wie ich es erwarte.Funktioniert Grep anders auf OSX

Wenn ich "-P" (Perl Regex) verwende, gibt es mir die "Verwendung" (- Hilfe) Ausgabe. Dort finden wir den Parameter "-P" in der Liste der Parameter "-abcDEFGHhIiJLlmnOoPqRSsUVvwxZ" ... Funktioniert immer noch nicht.

Ein anderes Beispiel ist das Sternchen oder das Pluszeichen. Ich versuche, diese http://wiki.bash-hackers.org/howto/conffile

Um eine Konfigurationsdatei für unangemessene Inhalte zu überprüfen, die Anweisung verwendet:

if egrep -q -v '^#|^[^ ]*=[^;]*' "$configfile"; then 
    echo "Config file is unclean, cleaning it..." >&2 
    # filter the original to a new file 
    egrep '^#|^[^ ]*=[^;&]*' "$configfile" > "$configfile_secured" 
    configfile="$configfile_secured" 
fi 

Und es funktioniert nicht auf Zeilen wie diese:

DATABASE=some_database; ls -la 

Was soll ich tun falsch? Ursache all dies funktioniert gut auf Linux-Maschinen.

+0

Diese Frage scheint off-topic zu sein, da es sich um ein wenig informiertes Geschrei handelt. –

+0

Die in 10.8 enthaltene Version von grep unterstützt '-P' nicht. 'grep -V' liefert' grep (BSD grep) 2.5.1-FreeBSD' in 10.8 und 'grep (GNU grep) 2.5.1' in 10.7. Sie können eine neuere Version von GNU grep mit 'brew tap homebrew/dupes; Brew installieren Homebrew/Dupes/Grep' – user495470

+3

Nicht wirklich fair, Jonathan. Ich hätte meine Sprache besser wählen sollen, aber die Frage bleibt immer noch. Ich stelle Fragen, um informiert zu werden, also ist es klar, dass ich gerade die Frage "nicht informiert" stelle. Ich habe aber gute Antworten bekommen. Danke an euch alle. – func0der

Antwort

7

ubuntu (na ja, meine alte ubuntu 8 Box sitze ich neben ...):

$ grep -V 
GNU grep 2.5.3 

OS X:

$ grep -V 
grep (BSD grep) 2.5.1-FreeBSD 

Ja; sie sind verschiedene Programme. OS X ist kein Linux. Es basiert auf BSD.

Wenn Sie die GNU-Version von Grep mit seinen verschiedenen Erweiterungen möchten, können Sie es einfach mit Homebrew installieren.

+0

Es wurde mit Homebrew installiert, aber 'grep -V' druckt immer noch' FreeBSD'. –

+3

Sie müssen 'ggrep' verwenden. –

+0

Sie könnten auch einen Alias ​​für Ihr ggrep erstellen, damit er anstelle des Systemgigrip verwendet wird. – mjp

3

Mac OS X auf BSD basiert, und verwendet nicht die GNU-Tools, die Sie gewohnt sind. Ich habe gelesen auf POSIX grep, weil ohne GNU-Erweiterungen Sie ohne Grund aufgeregt werden. Alles sollte noch möglich sein, nur nicht in der Art, wie Sie es gewohnt sind.

+0

Danke. Aber haben Sie eine Erklärung für den nicht passenden Teil meiner Frage? Der Abschnitt über die Erweiterung regulärer Ausdrücke (http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html#tag_09_04) sagt, dass dies zu undefinierten Ergebnissen für Zeichen wie "*" und "+" führen kann hier bewerben. Warum bekomme ich kein Ergebnis? – func0der

+0

@ func0der sorry Ich spreche kein regex ';-)'. Die schnellste Lösung für Sie ist, einfach GNU Grep zu installieren, entweder von der Quelle oder über Homebrew/Macports/... – rubenvb

+0

Ja, aber ich schreibe diese Skripte nicht für mich selbst, sondern für Kollegen, die out of the box Osx verwenden. Danke für deine Antwort trotzdem :) – func0der

Verwandte Themen