регулярное выражение

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

Аватара пользователя
bars
Сообщения: 643
ОС: BSD/LINUX

регулярное выражение

Сообщение bars »

Привет.
При парсинга nginx лога.

Код: Выделить всё

54.5.168.37 200  (Linux; Android 11; SM-T725)  
54.22.14.58 200 
54.25.18.37 200  (Windows NT 6.1; )  
93.3.111.18 200      
93.3.111.18 200      
6.26.13.30 200 
Подскажите пожалуйста, как мне убрать подобные строки?

Код: Выделить всё

93.3.111.18 200      
93.3.111.18 200      
6.26.13.30 200
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 678
ОС: debian, fedora (i3-wm)

Re: регулярное выражение

Сообщение olecya »

Иногда легче пройти мимо чем пытать топик стартера и вытягивать клещами исчерпывающую информацию.
А значит, чтобы получить быстрый ответ на вопрос лучше придерживаться общепринятой последовательности изложения проблемы.
  • 1. Пример вводных данных
  • 2. Что нужно получить на выходе
  • 3. Что для этого предпринималось
Например:
Парсинг файла в командной строке
У меня есть файл, привожу часть для примера:

Код: Выделить всё

a 1
b 2
c 3
Мне нужно получить только вторую колонку из цифр, а именно: Что я делала:

Код: Выделить всё

grep '[0-9]\+' file
Но на выходе получаю обе колонки:

Код: Выделить всё

a 1
b 2
c 3
Как изменить строку команды, чтобы добиться желаемого?
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 1995
ОС: Gentoo

Re: регулярное выражение

Сообщение ormorph »

^[[:digit:]]+.+[[:digit:]]+.+[[:digit:]]+.+[[:digit:]]*$
Что то типа этого. Точнее не могу, далеко от компа, возможно точку экранировать придётся. Можно обычным bash, а sed-ом удалять по номеру строки которая соответствует этому условию.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19431
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: регулярное выражение

Сообщение Bizdelnick »

bars писал:
03.08.2022 13:01
Подскажите пожалуйста, как мне убрать подобные строки?
Для начала — формализовать, чем они отличаются от тех, которые убирать не надо. Хотя бы на человеческом языке. Потом уже можно переходить к регулярным выражениям.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 643
ОС: BSD/LINUX

Re: регулярное выражение

Сообщение bars »

Пробовал так
| grep -v '200[[:space:]]$'
| grep '200[[:space:]][A-Za-z0-9("]'
Не помогло.
Отличаются они визуально набором информации.

Код: Выделить всё

11.193.177.241 200   
11.8.32.40 200 "python-requests/2.28.1"
34.25.11.64 200   
1.121.13.122 200   Version/13.1.1
18.176.6.104 200  (Linux; Android 6.0; vivo V5)  
34.25.13.175 200
54.25.18.37 200  (Windows NT 6.1; )
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 678
ОС: debian, fedora (i3-wm)

Re: регулярное выражение

Сообщение olecya »

Код: Выделить всё

grep '\s200\s\+\S'
Добавлено (17:12):
Если BSD (POSIX):

Код: Выделить всё

grep '[[:blank:]]200[[:blank:]]\+[[:graph:]]'
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 893
ОС: Slackware

Re: регулярное выражение

Сообщение UnixNoob »

bars писал:
04.08.2022 16:34
Отличаются они визуально набором информации.
Как абстрактно. Вы хотите отфильтровать запросы по статус-коду 200 или по IP? Если судить по первому сообщению, то вы выбрали конкретные IP, а сейчас хотите фильтровать по коду, так что вам в итоге требуется?
«Хорошо сформулированная проблема — наполовину решенная проблема».Чарлз Кеттеринг
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 1995
ОС: Gentoo

Re: регулярное выражение

Сообщение ormorph »

Хм, а если так:

Код: Выделить всё

#!/bin/bash

while read line
do
	if [[ $line =~ ^[[:digit:]]+.+[[:digit:]]+.+[[:digit:]]+.+[[:digit:]]+[[:space:]]+[[:digit:]]*$ ]] ; then
		echo $line
		#sed "/${line}/d" -i file.conf
	fi
done <file.conf
Последний раз редактировалось ormorph 04.08.2022 18:43, всего редактировалось 1 раз.
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 678
ОС: debian, fedora (i3-wm)

Re: регулярное выражение

Сообщение olecya »

Добавлю еще два варианта "от противного" чуть покороче:
olecya писала:
04.08.2022 16:53

Код: Выделить всё

grep '\s200\s\+\S'

Код: Выделить всё

grep -v '\s200\s*$'
FreeBSD:
olecya писала:
04.08.2022 16:53

Код: Выделить всё

grep '[[:blank:]]200[[:blank:]]\+[[:graph:]]'

Код: Выделить всё

grep -v '[[:blank:]]200[[:blank:]]*$'
Спасибо сказали:
Аватара пользователя
Zer0
Сообщения: 384
ОС: Void, Slackware

Re: регулярное выражение

Сообщение Zer0 »

logfile:

Код: Выделить всё

11.193.177.241 200   
11.8.32.40 200 "python-requests/2.28.1"
34.25.11.64 200   
1.121.13.122 200   Version/13.1.1
18.176.6.104 200  (Linux; Android 6.0; vivo V5)  
34.25.13.175 200
54.25.18.37 200  (Windows NT 6.1; )
cut -d' ' --fields=1,2 logfile

Выхлоп:

Shell

11.193.177.241 200
11.8.32.40 200
34.25.11.64 200
1.121.13.122 200
18.176.6.104 200
34.25.13.175 200
54.25.18.37 200
Memento mori ... сделай бэкап.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19431
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: регулярное выражение

Сообщение Bizdelnick »

bars писал:
04.08.2022 16:34
Отличаются они визуально набором информации.
Вам слов жалко, чтобы сформулировать вопрос? Тогда не удивляйтесь, если кто-то пожалеет слов, чтобы ответить, даже если каким-то образом догадается, чего Вы хотите.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 643
ОС: BSD/LINUX

Re: регулярное выражение

Сообщение bars »

Кудаж еще яснее объяснить,
Имеется выхлоп парсинга.

Код: Выделить всё

11.193.177.241 200   
11.8.32.40 200 "python-requests/2.28.1"
34.25.11.64 200   
1.121.13.122 200   Version/13.1.1
18.176.6.104 200  (Linux; Android 6.0; vivo V5)  
34.25.13.175 200
54.25.18.37 200  (Windows NT 6.1; )
Нужно убрать подобные строки:

Код: Выделить всё

11.193.177.241 200   
34.25.13.175 200
34.25.11.64 200
и т.д.
То-есть строки заканчивающиеся кодом ответа 200.
Добавлено (20:21):
olecya писала:
04.08.2022 17:58
grep -v '\s200\s*$'
grep -v '[[:blank:]]200[[:blank:]]*$'
Спасибо помогло.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 678
ОС: debian, fedora (i3-wm)

Re: регулярное выражение

Сообщение olecya »

bars писал:
04.08.2022 20:19
Кудаж еще яснее объяснить,
Я просто косвенно вывела из вашего коментария:
bars писал:
04.08.2022 16:34
Пробовал так
| grep -v '200[[:space:]]$'
| grep '200[[:space:]][A-Za-z0-9("]'
А вот чего не хватало:
bars писал:
04.08.2022 20:19
То-есть строки заканчивающиеся кодом ответа 200.
А все потому как в теме вы указали входные данные и упустили одну строку в списке которую хотите отфильтровать:
bars писал:
03.08.2022 13:01
54.5.168.37 200 (Linux; Android 11; SM-T725)
54.22.14.58 200
54.25.18.37 200 (Windows NT 6.1; )
93.3.111.18 200
93.3.111.18 200
6.26.13.30 200
bars писал:
03.08.2022 13:01
54.22.14.58 200
93.3.111.18 200
93.3.111.18 200
6.26.13.30 200
И выглядело это в одной из догадок так как надо было искать какую-то закономерность в самом ай пи адресе и составить по этому отличаю регулярное выражение.
Спасибо сказали: