grep –ignore-case –only

grep mislukt bij het gebruik van zowel –ignore-case als –only-match opties.
Voorbeeld:

$ echo "abc" | grep -io abc
abc
$ echo "ABC" | grep -io abc
$ 

Maar

$ echo "abc" | grep -i abc
abc
$ echo "ABC" | grep -i abc
ABC

Volgens de man-pagina:

  -o, --only-matching
          Show only the part of a matching line that matches PATTERN.
   -i, --ignore-case
          Ignore case distinctions in both the PATTERN and the input files.

Is het een bug van grep of ik heb de kaartpagina niet gekregen?

Ik gebruik Mac OS X 10.6.8 en

$ grep --version
grep (GNU grep) 2.5.1

Deze link gevonden: http:// lists.gnu.org/archive/html/bug-gnu-utils/2003-11/msg00040.html

Natuurlijk is het mogelijk om een tijdelijke oplossing te gebruiken, zoals grep -o [aA][bB][cC], maar dit lijkt geen goede optie te zijn.


Antwoord 1, autoriteit 100%

Dit is een bekendebugop de eerste 2.5.1 en is begin 2007 opgelost (Redhat 2.5.1-5) volgens de bugrapporten . Helaas gebruikt Apple nog steeds 2.5.1, zelfs op Mac OS X 10.7.2.

Je kunt een nieuwere versie krijgen via Homebrew (3.0)of MacPorts (2.26)of fink (3.0-1).


Bewerken: blijkbaar is het opgelost op OS X 10.11 (of misschien eerder), hoewel de gerapporteerde grep-versie nog steeds 2.5.1 is.


Antwoord 2, autoriteit 27%

Het kan een probleem zijn in uw versie van grep.

Uw testcases werken hier correct op mijn computer:

$ echo "abc" | grep -io abc
abc
$ echo "ABC" | grep -io abc
ABC

En mijn versie is:

$ grep --version
grep (GNU grep) 2.10

Antwoord 3, autoriteit 4%

Als je grep -i niet werkt, probeer dan de opdracht tr te gebruiken om de uitvoer van je bestand naar kleine letters te converteren en pijp het dan naar standaard grep met wat je maar zoekt. (het klinkt ingewikkeld, maar het eigenlijke commando dat ik voor je heb gegeven is dat niet!).

Merk op dat het tr-commando de inhoud van je originele bestand niet verandert, het converteert het gewoon voordat het het in grep invoert.

1.hier is hoe je dit kunt doen op een bestand

tr '[:upper:]' '[:lower:]' <your_file.txt|grep what_ever_you_are_searching_in_lower_case

2.of in jouw geval als je alleen maar iets herhaalt

echo "ABC"|tr '[:upper:]' '[:lower:]' | grep abc

Antwoord 4

Ik stel voor dat de -ibetekent dat het overeenkomt met “ABC”, maar het verschil zit in de uitvoer. -imanipuleert de invoer niet, dus het verandert “ABC” niet in “abc” omdat je “abc” als patroon hebt opgegeven. -ozegt dat het alleen het deel van de uitvoer toont dat overeenkomt met het gespecificeerde patroon, het zegt niet over overeenkomende invoer.

De uitvoer van echo "ABC" | grep -i abcis ABC, de -otoont uitvoer die overeenkomt met “abc” dus niets toont:

Naos:~ mattlacey$ echo "ABC" | grep -i abc | grep -o abc
Naos:~ mattlacey$ echo "ABC" | grep -i abc | grep -o ABC
ABC

Other episodes