Мне нужно извлечь некоторую информацию из очень большого файла.
Я хочу извлечь конкретные строки с помощью регулярных выражений.
Какой самый быстрый способ сделать это?
Я пишу в C ++ на Linux.
Я хочу использовать grep
, но, кажется, мое регулярное выражение не работает, как ожидалось.
Например \s
, \w
не работают должным образом.
В man grep
написано что \w
а также [:alnum:]
являются синонимами, так что \w
должен работать должным образом, но это не должно
Мне нужно использовать символы новой строки в моем регулярном выражении, поэтому я не могу использовать grep
Поэтому я решил использовать awk
,
Как я должен использовать newline
персонаж в awk
регулярное выражение?
Давайте рассмотрим, у нас есть файл (test.txt) с содержанием ниже:
ПРИВЕТ worl_d5;
какое-то утверждение
Привет, мир1;
немного
заявление
Привет
Привет
какое-то утверждение
…
И я хочу получить только эти строки:
ПРИВЕТ worl_d5;
какое-то утверждение
Привет, мир1;
немного
заявление
Я хочу найти строки, которые начинаются с HELLO
слово, за которым следует пробел (ы), затем буквенно-цифровой (или содержащие /
) слово, за которым следует пробел (символы), а затем один ;
, Но я хочу получить такие строки, когда они сопровождаются some statement
только линия
Я написал:
awk '/HELLO[[:space:]]([[:alnum:]]|\/)+[[:space:]];\n[[:space:]]*some[[:space:]] statement [[:space:]];/ { print }' test.txt
Но я не мог получить необходимые результаты.
Или просто приведите пример, где newline
используется в регулярных выражениях.
Я решил это с помощью pcregrep
а также newline
просто работал нормально!
pcregrep -M '(HELLO[[:space:]]([[:alnum:]]|\/|_)+[[:space:]];)[\r\n]([[:space:]]*some[[:space:]]statement[[:space:]];)' test.txt