2012-10-05 16 views
5

Ich brauche Hilfe mit Unix. Ich versuche zu sehen, ob eine von zwei Aussagen (printf und fprintf) in einer Datei sind. Ich habe den Befehl:Grep OR Operator funktioniert nicht

search=`cat $file | grep -w "fprintf\|printf"` 

Aus irgendeinem Grund findet es nicht in Dateien, in denen einer dieser beiden existiert. Warum?

+0

Warum Sie nicht das Wort regexp Flagge fallen, '-w'? – Steve

+2

[UUOC] (http://catb.org/jargon/html/U/UUOC.html) - Bitte beachten Sie, dass Sie 'search = $ (grep -w -E -e" f? Printf "$ Datei verwenden sollten) oder etwas Ähnliches, anstatt Zeit mit "Katze" und einer Pfeife zu verschwenden. –

Antwort

7

Sie haben zwei Probleme.

Erstens unterstützt standard grep den | Operator nicht. Sie müssen egrep oder das -E Flag verwenden.

Zweitens, innen doppelte Anführungszeichen, \| bedeutet \|. Der umgekehrte Schrägstrich wird an den Befehl grep übergeben. Selbst wenn der Operator grep den Operator | versteht, würde der umgekehrte Schrägstrich ihn in ein normales Zeichen verwandeln.

Versuchen Sie folgendes:

search=`cat $file | egrep -w "fprintf|printf"` 

Oder Sie jede Alternative als separates Argument grep zur Verfügung stellen kann:

search=`cat $file | grep -w -e fprintf -e printf 
+2

GNU Grep unterstützt es einfach gut. – paxdiablo

+0

Danke! Ich bin immer noch neu bei Unix. –

+0

Wenn er GNU Grep verwenden würde, hätte sein Befehl übereinstimmen. Standard 'grep' behandelt nicht' \ | 'wie' egrep' '' 'behandelt. –

0
grep -w "fprintf\|printf" $file 

Das funktioniert gut in meiner Shell. Dennoch, hier sind einige Alternativen:

egrep -w 'fprintf|printf' $file 
grep -wE 'fprintf|printf' $file 
grep -we 'fprintf\|printf' $file 
Verwandte Themen