grep plik, ale pokazać kilka otaczających linii?
Chciałbym grep
Dla ciągu znaków, ale również pokazać poprzednie pięć linii i następne pięć linii, a także dopasowaną linię. Jak miałbym to zrobić?
9 answers
Dla BSD lub GNU grep
możesz użyć -B num
, aby ustawić liczbę linii przed meczem i -A num
dla liczby linii po meczu.
grep -B 3 -A 2 foo README.txt
Jeśli chcesz mieć taką samą liczbę linii przed i po, możesz użyć -C num
.
grep -C 3 foo README.txt
To pokaże 3 linie przed i 3 linie po.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-21 08:33:54
-A
i -B
będzie działać, podobnie jak -C n
(dla n
linii kontekstu), lub po prostu -n
(dla n
linii kontekstu).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-14 01:13:05
ACK działa z podobnymi argumentami jak grep i akceptuje -C
. Ale zwykle lepiej jest przeszukiwać kod.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-06 19:36:39
grep astring myfile -A 5 -B 5
To grep "myfile" dla "cierpliwości" i pokazuje 5 linii przed i po każdym meczu
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-12 17:58:00
Normalnie używam
grep searchstring file -C n # n for number of lines of context up and down
Wiele narzędzi, takich jak grep, ma również naprawdę świetne pliki man. Odnosiłem się do strony man grepa bardzo często, ponieważ można z nią zrobić tak wiele.
man grep
Wiele narzędzi GNU posiada również stronę informacyjną , która może zawierać więcej przydatnych informacji oprócz strony podręcznika.
info grep
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-12 19:11:40
Wyszukaj "17655 "W" /some/file.txt " wyświetlanie kontekstu 10 linii przed i po (za pomocą Awk), wyjście poprzedzone numerem linii, a następnie dwukropkiem. Użyj tego na Solarisie, gdy 'grep' nie obsługuje opcji " - [ACB]".
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;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-26 15:31:46
Użyj 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-12 11:25:38
ripgrep
Jeśli zależy ci na wydajności, użyj ripgrep
który ma podobną składnię do grep
, np.
rg -C5 "pattern" .
-C
,--context NUM
- Pokaż liczbę linii przed i po każdym meczu.
Istnieją również takie parametry jak -A
/--after-context
Oraz -B
/--before-context
.
Narzędzie jest zbudowane na bazie silnika regex Rusta , co sprawia, że jest bardzo wydajnena dużych danych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-11 10:28:35
Oto @ Ygor rozwiązanie W 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
Uwaga: Zastąp zmienne a
i b
liczbą wierszy przed i po.
Jest to szczególnie przydatne dla systemu, który nie obsługuje grepa -A
, -B
i -C
parametry.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-11 10:24:12