මම grep
නූලක් සඳහා කැමතියි , නමුත් පෙර පේළි පහ සහ පහත දැක්වෙන පේළි පහ මෙන්ම ගැලපෙන රේඛාවද පෙන්වන්න. මට මෙය කළ හැක්කේ කෙසේද?
man grep | grep -C 1 context
:)
man grep | grep -C 1 "\-C"
;)
මම grep
නූලක් සඳහා කැමතියි , නමුත් පෙර පේළි පහ සහ පහත දැක්වෙන පේළි පහ මෙන්ම ගැලපෙන රේඛාවද පෙන්වන්න. මට මෙය කළ හැක්කේ කෙසේද?
man grep | grep -C 1 context
:)
man grep | grep -C 1 "\-C"
;)
Answers:
සඳහා 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 ක් පෙන්වනු ඇත.
-A
හා -B
කැමැත්ත ලෙස වැඩ කරනු ඇත -C n
(සඳහා n
සන්දර්භය තුළයි), හෝ හුදෙක් -n
(සඳහා n
සන්දර්භය තුළයි ... තාක් කල් 1 සිට 9 දක්වා වන n වැනි) ඒ අතර වේ.
-n
ආකෘතිය උත්සාහ කර බැලූ විට එය ක්රියාත්මක වන තෙක් පමණක් ක්රියාත්මක විය 9
. සඳහා 15
එය 5 රේඛා නැවත
-A
, -B
හෝ -C
). සාමාන්යයෙන්, විකල්ප පිරිවිතරයට පසුව අගයක් ලැබේ ( -o a.out
GCC හි ප්රතිදාන ගොනුව නියම කිරීමට), නමුත් එය සරල ස්විචයක් / ධජයක් ලෙස ක්රියා කළ හැකිය ( -g
GCC හි නිදොස් කිරීමේ තොරතුරු සක්රීය කිරීම සඳහා). කෙසේ වෙතත් විකල්ප අතර ඇති අවකාශයන් අත්යවශ්ය නොවේ, එබැවින් වටිනාකමක් නැති විකල්ප සඳහා, ඒවා ඒකාබද්ධ කළ හැකිය ( -ABC
), එයින් අදහස් -15
වන්නේ අර්ථ නිරූපණය -1 -5
(වෙනම විකල්ප දෙකක්) සහ -5
අභිබවා යන -1
බවයි.
ack grep හා සමාන තර්ක සමඟ ක්රියා කරන අතර පිළිගනී -C
. නමුත් සාමාන්යයෙන් කේතය හරහා සෙවීම වඩා හොඳය.
grep
"වෙළඳ දැන්වීම්" සඳහා භාවිතා කිරීම ගැන විශ්වාස නැත ack
(එය ඇත්තෙන්ම හොඳ මෙවලමකි) හොඳ අදහසකි…
grep astring myfile -A 5 -B 5
එය "ඇස්ට්රිං" සඳහා "මයිෆයිල්" ලබා ගන්නා අතර එක් එක් තරඟයට පෙර සහ පසු පේළි 5 ක් පෙන්වයි
මම සාමාන්යයෙන් භාවිතා කරමි
grep searchstring file -C n # n for number of lines of context up and down
Grep වැනි බොහෝ මෙවලම් වලද නියම මිනිසාගේ ගොනු තිබේ. ග්රෙප්ගේ මෑන් පිටුව ගැන මා බොහෝ දේ සඳහන් කරන්නේ ඔබට එය සමඟ කළ හැකි බොහෝ දේ ඇති බැවිනි.
man grep
බොහෝ GNU මෙවලම් වල තොරතුරු පිටුවක් ද ඇත, එය man පිටුවට අමතරව වඩාත් ප්රයෝජනවත් තොරතුරු තිබිය හැකිය.
info grep
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
"/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;
ripgrep
ඔබ කාර්ය සාධනය ගැන සැලකිලිමත් නම්, ripgrep
සමාන වාක්ය ඛණ්ඩයක් භාවිතා කරන්න grep
, උදා
rg -C5 "pattern" .
-C
,--context NUM
- එක් එක් තරඟයට පෙර සහ පසු NUM රේඛා පෙන්වන්න.
-A
/ --after-context
සහ -B
/ වැනි පරාමිතීන් ද --before-context
ඇත.
මෙවලම රස්ට්ගේ රීජෙක්ස් එන්ජිමට ඉහළින් ඉදිකර ඇති අතර එමඟින් විශාල දත්ත මත එය ඉතා කාර්යක්ෂම වේ.
මෙන්න මේ @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
පරාමිතීන්.
මම සංයුක්ත ආකාරයකින් කරන්නෙමි
grep -5 string file
එය සමාන වේ
grep -A 5 -B 5 string file
ඔබ බොහෝ විට කේතය සොයන්නේ නම්, රිදී සෙවුම්කරු ඒ.ජී. grep වලට වඩා කාර්යක්ෂම (එනම් වේගවත්) වේ.
-C විකල්පය භාවිතා කිරීමෙන් ඔබ සන්දර්භ රේඛා පෙන්වයි.
උදා:
ag -C 3 "foo" myFile
line 1
line 2
line 3
line that has "foo"
line 5
line 6
line 7