Vraag een bestand grep, maar verschillende omringende regels weergeven?


ik had graag grep voor een string, maar toon ook de voorgaande vijf regels en de volgende vijf regels evenals de overeenkomende regel. Hoe zou ik dit kunnen doen?


2748
2017-08-12 17:55


oorsprong


antwoorden:


Voor BSD of GNU  grep je kunt gebruiken -B num om in te stellen hoeveel regels vóór de wedstrijd en -A num voor het aantal regels na de wedstrijd.

grep -B 3 -A 2 foo README.txt

Als u hetzelfde aantal regels wilt vóór en na dat u kunt gebruiken -C num.

grep -C 3 foo README.txt

Dit toont 3 regels eerder en 3 regels erachter.


3667
2017-08-12 17:57



-A en -B zal werken, zoals zal -C n (voor n contextlijnen), of gewoon -n (voor n contextlijnen).


520
2017-08-12 17:59



ack werkt met vergelijkbare argumenten als grep en accepteert -C. Maar het is meestal beter voor het doorzoeken van code.


66
2017-09-07 11:13



grep astring myfile -A 5 -B 5

Dat zal "mijnbestand" voor "astring" grepen, en 5 regels weergeven voor en na elke wedstrijd


32
2017-08-12 17:58



Ik gebruik normaal

grep searchstring file -C n # n for number of lines of context up and down

Veel van de tools zoals grep hebben ook echt geweldige man-bestanden. Ik merk dat ik ernaar verwijs de mannenpagina van grep veel omdat er zoveel is dat je ermee kunt doen.

man grep

Veel GNU-tools hebben ook een info pagina dat kan meer nuttige informatie hebben naast de man-pagina.

info grep

16
2017-08-12 18:42



Zoek naar "17655" in "/some/file.txt" en toont 10 lijnen context voor en na (met Awk), uitvoer voorafgegaan door regelnummer gevolgd door een dubbele punt. Gebruik dit op Solaris wanneer 'grep' de opties "- [ACB]" niet ondersteunt.

awk '

/17655/ {
        for (i = (b + 1) % 10; i != b; i = (i + 1) % 10) {
                print before[i]
        }
        print (NR ":" ($0))
        a = 10
}

a-- > 0 {
        print (NR ":" ($0))
}

{
        before[b] = (NR ":" ($0))
        b = (b + 1) % 10
}' /some/file.txt;

8
2017-10-08 00:21



Gebruik grep

$ grep --help | grep -i context
Context control:
  -B, --before-context=NUM  print NUM lines of leading context
  -A, --after-context=NUM   print NUM lines of trailing context
  -C, --context=NUM         print NUM lines of output context
  -NUM                      same as --context=NUM

5
2018-01-12 11:25