ගොනුවක් grep කරන්න, නමුත් අවට පේළි කිහිපයක් පෙන්වන්න?


3426

මම grepනූලක් සඳහා කැමතියි , නමුත් පෙර පේළි පහ සහ පහත දැක්වෙන පේළි පහ මෙන්ම ගැලපෙන රේඛාවද පෙන්වන්න. මට මෙය කළ හැක්කේ කෙසේද?


3
මේ සඳහා මම බ්‍රෙන්ඩන් ග්‍රෙග්ගේ පර්ල් පිටපතෙහි පිටපතක් තබා ගතිමි . හොඳින් ක්රියා කරයි.
ඊතන් පෝස්ට්

6
සොලාරිස් මත ක්‍රියාත්මක වන විසඳුමක් සඳහා, මෙම සබැඳිය බලන්න .
ජහ්රෝයි

107
man grep | grep -C 1 context:)
StvnW

20
man grep | grep -C 1 "\-C";)
ඇන්ඩර්ස් බී

9
@StvnW ... එම මෙටා (වඩාත් සාමාන්‍යයෙන් SO සන්දර්භයට වඩා) අමතන්නේද, නැතහොත් එය හැඳින්විය යුත්තේ කුමක් දැයි මම නොදනිමි . පිළිතුර සොයා ගැනීම සඳහා පිළිතුර භාවිතා කරන්නේ කෙසේදැයි පෙන්වමින් ඔබ ප්‍රශ්නයට පිළිතුරු දුන්නා.
bballdave025

Answers:


4545

සඳහා BSD හෝ GNU grep ඔබට භාවිතා කළ හැකි -B numආකාරය බොහෝ රැහැන් තරගයේ පෙර නියම කිරීමට සහ -A numතරගයේ පසු රේඛා සංඛ්යාව සඳහා.

grep -B 3 -A 2 foo README.txt

ඔබට භාවිතා කිරීමට පෙර සහ පසු එකම පේළි ගණනක් අවශ්‍ය නම් -C num.

grep -C 3 foo README.txt

මෙය පෙර පේළි 3 ක් සහ පසුව පේළි 3 ක් පෙන්වනු ඇත.


56
එය හොඳයි, නමුත් අවාසනාවකට සොලාරිස් ග්‍රෙප් එයට සහාය නොදක්වයි. සූර්යාලෝකය සඳහා එම සබැඳිය බලන්න: unix.com/solaris/33533-grep-display-few-lines-before-after.html
рüффп

9
හරි, නමුත් තරඟයෙන් පසු සියලු ප්‍රතිදාන රේඛා පෙන්වීමට අවශ්‍ය නම් කුමක් කළ යුතුද? grep -A0 සහ grep -A-1 එය කපන්න එපා ...
g33kz0r

2
මගේ මිනිසාගේ පිටුවල සඳහන් වුවද, කිසියම් හේතුවක් නිසා මා වෙනුවෙන් වැඩ නොකරයි.
හයිරි උයුර් කොල්ටුක්

2
ඔබ HP-UX env නම්, සොලරිස් හි මෙන් grep අනුවාද කිසිවක් ක්‍රියා නොකරනු ඇත. සොලාරිස් සබැඳිය භාවිතා කිරීමට හැකි වූ නමුත් එම සබැඳියේ නවක වෙනුවට අමුතු ආදේශ කරන්න.
zkarthik

6
-n යනු රේඛා අංක සඳහා වන නමුත් grep -n # හි සමහර අනුවාද සඳහා පේළි අංක සහිත # අවට රේඛා (-c වැනි) පෙන්වනු ඇත. මට සන්දර්භය අවශ්‍ය වූ විට එය මගේ ප්‍රයෝජනවත් කෙටිමඟකි.
ඇන්තනි දීසන්ති

607

-Aහා -Bකැමැත්ත ලෙස වැඩ කරනු ඇත -C n(සඳහා nසන්දර්භය තුළයි), හෝ හුදෙක් -n(සඳහා nසන්දර්භය තුළයි ... තාක් කල් 1 සිට 9 දක්වා වන n වැනි) ඒ අතර වේ.


මම -nආකෘතිය උත්සාහ කර බැලූ විට එය ක්‍රියාත්මක වන තෙක් පමණක් ක්‍රියාත්මක විය 9. සඳහා 15එය 5 රේඛා නැවත
දීපක් Mahakale

8
E ඩීපක් මහකලේ මෙය බොහෝ විට POSIX වැඩසටහන් මඟින් විධාන රේඛා තර්ක / විකල්ප විග්‍රහ කරන ආකාරය හා සම්බන්ධ වේ. විකල්ප පිරිවිතර යනු තනි අක්ෂරයකි (වැනි -A, -Bහෝ -C). සාමාන්‍යයෙන්, විකල්ප පිරිවිතරයට පසුව අගයක් ලැබේ ( -o a.outGCC හි ප්‍රතිදාන ගොනුව නියම කිරීමට), නමුත් එය සරල ස්විචයක් / ධජයක් ලෙස ක්‍රියා කළ හැකිය ( -gGCC හි නිදොස් කිරීමේ තොරතුරු සක්‍රීය කිරීම සඳහා). කෙසේ වෙතත් විකල්ප අතර ඇති අවකාශයන් අත්‍යවශ්‍ය නොවේ, එබැවින් වටිනාකමක් නැති විකල්ප සඳහා, ඒවා ඒකාබද්ධ කළ හැකිය ( -ABC), එයින් අදහස් -15වන්නේ අර්ථ නිරූපණය -1 -5(වෙනම විකල්ප දෙකක්) සහ -5අභිබවා යන -1බවයි.
natiiix

1
-5 -A 5 -B 5 ට වඩා වේගවත් වේ. ඒවා එකට භාවිතා කිරීමට අදහස් නොකෙරේ. ඔබ -A හෝ -B හෝ -C ඕවර් -9 තෝරා ගන්නේ නම් එය පිටපත කියවන අනෙකුත් පා readers කයන්ට පිරිසිදු වේ.
එරික් ඇල්ඩින්ගර්

77

ack grep හා සමාන තර්ක සමඟ ක්‍රියා කරන අතර පිළිගනී -C. නමුත් සාමාන්‍යයෙන් කේතය හරහා සෙවීම වඩා හොඳය.


5
ack ද -A -B සඳහා සහය දක්වයි.
ෂුඕ

අක්කර බොහෝ ආකාරවලින් grep වලට වඩා හොඳයි. එය සරල වාක්‍ය ඛණ්ඩයකින් වේගවත් වේ.
චිම්

1
බොහෝ පද්ධති වල පෙරනිමියෙන් ස්ථාපනය කිරීමේ වාසිය grep සතුව ඇත.
මාක් ඉසෙඩ්

1
ArMarcZ: ඇත්ත වශයෙන්ම, grep අක්කට වඩා පෙරනිමියෙන් ස්ථාපනය කිරීමට ඉඩ ඇත, නමුත් අක් යනු අතේ ගෙන යා හැකි, තනිවම ලියන ලද පිටපතකි. එය සම්පාදනය කිරීමට හෝ / usr / bin / වැනි පද්ධති නාමාවලියක ස්ථාපනය කිරීමට අවශ්‍ය නැත. එය බාගත කර $ PATH හි ලැයිස්තුගත කර ඇති නාමාවලියකට ඇතුළත් කළ පසු (සහ එහි eXecute අවසර බිට් කට්ටලය), එය වහාම ක්‍රියාත්මක විය යුතුය. (වැඩ කිරීමට අක්කර ලබා ගැනීම සඳහා සුඩෝ හෝ මූල වරප්‍රසාද අවශ්‍ය නොවේ.)
ජේ.එල්.

මෙම ප්‍රශ්නය grep"වෙළඳ දැන්වීම්" සඳහා භාවිතා කිරීම ගැන විශ්වාස නැත ack(එය ඇත්තෙන්ම හොඳ මෙවලමකි) හොඳ අදහසකි…
MonsieurDart

39
grep astring myfile -A 5 -B 5

එය "ඇස්ට්‍රිං" සඳහා "මයිෆයිල්" ලබා ගන්නා අතර එක් එක් තරඟයට පෙර සහ පසු පේළි 5 ක් පෙන්වයි


19
"grep astring myfile -C 5" ද එසේ කරනු ඇත
සයිඩ් සිරාජ් උඩ්ඩින්

20

මම සාමාන්‍යයෙන් භාවිතා කරමි

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

Grep වැනි බොහෝ මෙවලම් වලද නියම මිනිසාගේ ගොනු තිබේ. ග්‍රෙප්ගේ මෑන් පිටුව ගැන මා බොහෝ දේ සඳහන් කරන්නේ ඔබට එය සමඟ කළ හැකි බොහෝ දේ ඇති බැවිනි.

man grep

බොහෝ GNU මෙවලම් වල තොරතුරු පිටුවක් ද ඇත, එය man පිටුවට අමතරව වඩාත් ප්‍රයෝජනවත් තොරතුරු තිබිය හැකිය.

info grep

13

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

ඔබ පිළිගත් පිළිතුර කියවා නැද්ද? අවුරුදු 10 කට ආසන්න පැරණි ප්‍රශ්නයක දැනටමත් පවසා ඇති දේ ඔබ පුනරුච්චාරණය කරයි ...
යොකායි

7
මට සමාවෙන්න යොකායි. නමුත් පිළිතුර ලබා ගැනීම සඳහා grep හි උපකාරක අංශය අතුගා දැමීම ගැන මම කිසිවක් කියවන්නේ නැත.
චියෙල් ටෙන් බ්‍රින්කේ

1
@ යොකායි චියෙල් ටෙන් බ්‍රින්කේ පැවසූ දේට අමතරව, පිළිගත් පිළිතුරෙහි දිගු විකල්පයන් සඳහන් නොවේ
පරිශීලක 3738870

11

"/Some/file.txt" හි "17655" සඳහා සොයන්න පේළි 10 ක සන්දර්භය පෙන්වීමට පෙර සහ පසු (අව්ක් භාවිතා කරමින්), ප්‍රතිදානය පෙර පේළි අංකයට පසුව මහා බඩවැලකින්. '- [ACB] "විකල්පයන්ට' grep 'සහාය නොදක්වන විට මෙය සොලාරිස් හි භාවිතා කරන්න.

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;

7

ripgrep

ඔබ කාර්ය සාධනය ගැන සැලකිලිමත් නම්, ripgrepසමාන වාක්‍ය ඛණ්ඩයක් භාවිතා කරන්න grep, උදා

rg -C5 "pattern" .

-C, --context NUM- එක් එක් තරඟයට පෙර සහ පසු NUM රේඛා පෙන්වන්න.

-A/ --after-contextසහ -B/ වැනි පරාමිතීන් ද --before-contextඇත.

මෙවලම රස්ට්ගේ රීජෙක්ස් එන්ජිමට ඉහළින් ඉදිකර ඇති අතර එමඟින් විශාල දත්ත මත එය ඉතා කාර්යක්ෂම වේ.


5

මෙන්න මේ @Ygor විසඳුමක් දීawk

awk 'c-->0;$0~s{if(b)for(c=b+1;c>1;c--)print r[(NR-c+1)%b];print;c=a}b{r[NR%b]=$0}' b=3 a=3 s="pattern" myfile

සටහන: පෙර සහ පසු පේළි ගණන සමඟ ප්‍රතිස්ථාපනය aසහ bවිචල්‍යයන්.

එය සුරකියි ගේ සහාය නොවන පද්ධතිය සඳහා විශේෂයෙන් ප්රයෝජනවත් -A, -Bසහ -Cපරාමිතීන්.


4
$ grep thestring thefile -5

-55තරඟයට ඉහළින් සහ පහළින් රේඛා ඔබට ලබා දෙයි 'thestring' සමාන -C 5හෝ -A 5 -B 5.


4

ග්‍රෙප්ට විකල්පයක් ඇත Context Line Control, ඔබට එය භාවිතා කළ හැකිය --context, සරලවම,

| grep -C 5

හෝ

| grep -5

උපක්‍රමය කළ යුතුයි



0

ඔබ බොහෝ විට කේතය සොයන්නේ නම්, රිදී සෙවුම්කරු ඒ.ජී. grep වලට වඩා කාර්යක්ෂම (එනම් වේගවත්) වේ.

-C විකල්පය භාවිතා කිරීමෙන් ඔබ සන්දර්භ රේඛා පෙන්වයි.

උදා:

ag -C 3 "foo" myFile

line 1
line 2
line 3
line that has "foo"
line 5
line 6
line 7
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.