Согласно в этом ответе SO , arch
проводится различие между PowerPC(ppc
)и Intel (i386
), а не между 32-битным -и 64-битным -ядром на x86. Таким образом, в этом контексте i386
означает процессор x86.
Проверьте вывод uname -m
, чтобы узнать тип вашей машины. (В Linux arch
эквивалентно uname -m
.)
См. также этот раздел вопросов и ответов .
Вот как вы можете сделать это на питоне (Я немного добавил к вашему примеру, чтобы доказать, что вы все еще можете получить нужные совпадения, даже если есть случайные отдельные строки AAAAAAAAA, BBBBBBBBB или CCCCCCCCC, разбросанные по всему лог-файл):
ниже приведено содержимое find _log _vulns.py
#! /usr/bin/python3
import re
test_string = """1234324
AAAAAAAAA
BBBBBBBBB
CCCCCCCCC
absdfjv4er4
AAAAAAAAA
BBBBBBBBB
CCCCCCCCC
123466666
AAAAAAAAA
ghrhvhhhfh
BBBBBBBBB
fjwjefjsjfjwjf
CCCCCCCCC
24wfsgggg
AAAAAAAAA
BBBBBBBBB
CCCCCCCCC
zzzz"""
matches = re.findall('AAAAAAAAA\nBBBBBBBBB\nCCCCCCCCC\n', test_string, re.MULTILINE)
print(matches)
Результат, который я получаю от запуска выше:
$./find_log_vulns.py
['AAAAAAAAA\nBBBBBBBBB\nCCCCCCCCC\n', 'AAAAAAAAA\nBBBBBBBBB\nCCCCCCCCC\n', 'AAAAAAAAA\nBBBBBBBBB\nCCCCCCCCC\n']
Как показано выше, каждое совпадение будет возвращено как элемент списка.
с помощью ripgrep:
rg -U 'A+\nB+\nC+' in
2:AAAAAAAAA
3:BBBBBBBBB
4:CCCCCCCCC
6:AAAAAAAAA
7:BBBBBBBBB
8:CCCCCCCCC
16:AAAAAAAAA
17:BBBBBBBBB
18:CCCCCCCCC
вы можете избавиться от номеров строк и так далее. Если вам нужны разделители между совпадениями, вы можете сделать это:
rg -U 'A+\nB+\nC+' in | rg --passthru -e '(^A)' -r $'\n'A
AAAAAAAAA
BBBBBBBBB
CCCCCCCCC
AAAAAAAAA
BBBBBBBBB
CCCCCCCCC
AAAAAAAAA
BBBBBBBBB
CCCCCCCCC
Использованиеawk
:
awk -v ptrn="AAAAAAAAA\0BBBBBBBBB\0CCCCCCCCC\0" '
BEGIN{ split(ptrn, tmp, "\0"); lngth=gsub("\0", "", ptrn ) }
$0 ~ tmp[++fieldNr]{ buf=(buf==""?"": buf OFS) NR":"$0 ;
if ( fieldNr == lngth ) { print buf; exit }
next
}
{ fieldNr=0; buf="" }' infile
это даст вам номер строки, за которым следует соответствующее содержимое строки; здесь мы использовали «частичное совпадение регулярных выражений», используя шаблоны из «ptrn » для строк. см. Как найти текст, соответствующий шаблону? для других вариантов соответствия.
мы использовали символ NUL \0
для разделения шаблонов.
Пример ввода:
AAAAAAAAA
BBBBBBBBB
CCCCCCCCC
AAAAAAAAA
BBBBBBBBB
ccccccccc
123AAAAAAAAA
BBBBBBBBB123
123CCCCCCCCC3
Выход:
8:123AAAAAAAAA 9:BBBBBBBBB123 10:123CCCCCCCCC3
Просто по приколу со старыми добрымиawk
cat file | wc -l
21287021
с > 3000 000 совпадений
time awk 'BEGIN{getline; a=$0; getline; b=$0}
$0~/^C+$/ && a~/^A+$/ && b~/^B+$/{print "match starting on line "NR-2 }{a=b;b=$0}' file
real 0m12.644s
user 0m7.149s
sys 0m4.314s
По сравнению с rg
на моей машине
time rg -U 'A+\nB+\nC+' file
real 0m40.322s
user 0m16.503s
sys 0m17.246s