регулярний вираз, щоб знайти рядок, а потім шукати номер у рядку

Привіт У мене є деякі файли журналів, які записують операції з програмного забезпечення з їх виконанням, десь всередині файлу журналу я маю рядки, схожі на цей:

6/26/2013 6:56:43 AM -  >>> BuildStops.BuildStop.AddConsignee: 7198ms

If I do grep "BuildStops.BuildStop.AddConsignee:" System_2013626.log

Я можу отримати всі лінії, але я намагаюся створити шаблон, який дозволить мені знайти рядки, які містять час виконання більше 10 000 мс

Будь-яка допомога, будь ласка

1

13 Відповіді

Легко:

grep -E "BuildStops\.BuildStop\.AddConsignee: ([5-9][0-9]{3}|[0-9]{5})" System_2013626.log

Це збігається з рядком, якщо в такому положенні присутні (принаймні) п'ять цифр або чотиризначне число, яке починається принаймні з 5 . Крім того, не забудьте уникнути буквових точок.

2
додано
@ user2247823: без зворотного слеш точка буде відповідати будь-якому символу. Це навряд чи буде проблемою в цій конкретній ситуації, але ви завжди повинні бути явними.
додано Автор Tim Pietzcker, джерело
Простір не є метасимволом у регулярних виразах , тому не потрібно втекти від нього.
додано Автор Tim Pietzcker, джерело
Я бачу. Чи потрібно мені втекти від простору, чи я повинен робити це, щоб бути в безпеці?
додано Автор laitha0, джерело
чи є спосіб шукати певну цифру, а не шукати 5 цифр (це означає, що 10 000 або вище), але я також хотів би також шукати речі вище 5 000 мс
додано Автор laitha0, джерело
вам не потрібно втекти від "." або простору, він працює просто чудово. Дякую!
додано Автор laitha0, джерело
Ну, з вашого оновлення я думаю, відповідь на мій коментар є" так ".
додано Автор fedorqui, джерело

Легко:

grep -E "BuildStops\.BuildStop\.AddConsignee: ([5-9][0-9]{3}|[0-9]{5})" System_2013626.log

Це збігається з рядком, якщо в такому положенні присутні (принаймні) п'ять цифр або чотиризначне число, яке починається принаймні з 5 . Крім того, не забудьте уникнути буквових точок.

2
додано
Простір не є метасимволом у регулярних виразах , тому не потрібно втекти від нього.
додано Автор Tim Pietzcker, джерело
@ user2247823: без зворотного слеш точка буде відповідати будь-якому символу. Це навряд чи буде проблемою в цій конкретній ситуації, але ви завжди повинні бути явними.
додано Автор Tim Pietzcker, джерело
чи є спосіб шукати певну цифру, а не шукати 5 цифр (це означає, що 10 000 або вище), але я також хотів би також шукати речі вище 5 000 мс
додано Автор laitha0, джерело
Я бачу. Чи потрібно мені втекти від простору, чи я повинен робити це, щоб бути в безпеці?
додано Автор laitha0, джерело
вам не потрібно втекти від "." або простору, він працює просто чудово. Дякую!
додано Автор laitha0, джерело
Ну, з вашого оновлення я думаю, відповідь на мій коментар є" так ".
додано Автор fedorqui, джерело

Використовуйте наступне:

grep -E "BuildStops.BuildStop.AddConsignee: [[:digit:]]{5}" file

it looks for 5 digits numbers, which is the pattern numbers >=10,000 accomplish.

Тест

$ cat file
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 7198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 17198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 171898ms
$ grep -E "BuildStops.BuildStop.AddConsignee: [[:digit:]]{5}" file
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 17198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 171898ms

, тому я хотів би, щоб вона була більш динамічною, іноді я хочу шукати все   Колись хочеться шукати понад 4000

Ми можемо визначити 4000 як:
- [4-9] , а також 3 цифри.
- принаймні 5 цифр.

$ cat file
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 7198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 71998ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 3198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 17198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 171898ms
12345
$ grep -E "BuildStops.BuildStop.AddConsignee: ([4-9][[:digit:]]{3}|[[:digit:]]{5})" file
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 7198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 71998ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 17198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 171898ms
2
додано
Спробуйте на лінії, яка містить лише п'ятизначне число.
додано Автор Tim Pietzcker, джерело
Обережно, вам потрібно обмежити обсяг вашої чергування.
додано Автор Tim Pietzcker, джерело
Тим правильно це "[4-9] [[:: digit:]]" {3} "самостійно буде працювати, і він дасть лінії, які перевищують 4000, але менше 10000, якщо ви додаєте" | | [[: digit: ]] {5} "це не вдається
додано Автор laitha0, джерело
Ти геній. тому, якщо я шукаю понад 6000, я б зробив те ж саме, але замініть [4-9] [[: digit:]] [3] з [6-9] [[: digit:]] {3} правильно?
додано Автор laitha0, джерело
Чи можете ви пояснити мені, як шукає понад 10 000. Я думаю, що ви зробили тут те, що ви шукаєте 5-значні цифри, що означало би більше 10 000, але я кинув це число, щоб зробити його трохи простішим, і це буде змінюватися в залежності від ситуації, тому я хотів би, щоб воно було більш динамічним , іноді я хочу шукати понад 10 000, я коли-небудь хочу шукати понад 4000
додано Автор laitha0, джерело
Подивіться мою оновлену відповідь @ user2247823, тепер вона працює для мене.
додано Автор fedorqui, джерело
О, я бачу, @TimPietzcker, тому я думаю, що ([4-9] [[: digit:]] {3} | [[: digit:]] {5}) може зробити це: enclose в дужках. Я тестував і працює, правильно це?
додано Автор fedorqui, джерело
Так, @ user2247823, точно.
додано Автор fedorqui, джерело
В порядку! Це було складним завданням. Подивіться на мою оновлену відповідь, я думаю, що це має бути вирішено зараз.
додано Автор fedorqui, джерело
Ммм, що ти маєш на увазі, @TimPietzcker? Я досить новий у регулярному вираженні і не можу побачити, що моє може бути неправильним.
додано Автор fedorqui, джерело

Використовуйте наступне:

grep -E "BuildStops.BuildStop.AddConsignee: [[:digit:]]{5}" file

it looks for 5 digits numbers, which is the pattern numbers >=10,000 accomplish.

Тест

$ cat file
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 7198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 17198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 171898ms
$ grep -E "BuildStops.BuildStop.AddConsignee: [[:digit:]]{5}" file
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 17198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 171898ms

, тому я хотів би, щоб вона була більш динамічною, іноді я хочу шукати все   Колись хочеться шукати понад 4000

Ми можемо визначити 4000 як:
- [4-9] , а також 3 цифри.
- принаймні 5 цифр.

$ cat file
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 7198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 71998ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 3198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 17198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 171898ms
12345
$ grep -E "BuildStops.BuildStop.AddConsignee: ([4-9][[:digit:]]{3}|[[:digit:]]{5})" file
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 7198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 71998ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 17198ms
6/26/2013 6:56:43 AM - >>> BuildStops.BuildStop.AddConsignee: 171898ms
2
додано
Спробуйте на лінії, яка містить лише п'ятизначне число.
додано Автор Tim Pietzcker, джерело
Обережно, вам потрібно обмежити обсяг вашої чергування.
додано Автор Tim Pietzcker, джерело
Тим правильно це "[4-9] [[:: digit:]]" {3} "самостійно буде працювати, і він дасть лінії, які перевищують 4000, але менше 10000, якщо ви додаєте" | | [[: digit: ]] {5} "це не вдається
додано Автор laitha0, джерело
Ти геній. тому, якщо я шукаю понад 6000, я б зробив те ж саме, але замініть [4-9] [[: digit:]] [3] з [6-9] [[: digit:]] {3} правильно?
додано Автор laitha0, джерело
Чи можете ви пояснити мені, як шукає понад 10 000. Я думаю, що ви зробили тут те, що ви шукаєте 5-значні цифри, що означало би більше 10 000, але я кинув це число, щоб зробити його трохи простішим, і це буде змінюватися в залежності від ситуації, тому я хотів би, щоб воно було більш динамічним , іноді я хочу шукати понад 10 000, я коли-небудь хочу шукати понад 4000
додано Автор laitha0, джерело
Подивіться мою оновлену відповідь @ user2247823, тепер вона працює для мене.
додано Автор fedorqui, джерело
О, я бачу, @TimPietzcker, тому я думаю, що ([4-9] [[: digit:]] {3} | [[: digit:]] {5}) може зробити це: enclose в дужках. Я тестував і працює, правильно це?
додано Автор fedorqui, джерело
Так, @ user2247823, точно.
додано Автор fedorqui, джерело
В порядку! Це було складним завданням. Подивіться на мою оновлену відповідь, я думаю, що це має бути вирішено зараз.
додано Автор fedorqui, джерело
Ммм, що ти маєш на увазі, @TimPietzcker? Я досить новий у регулярному вираженні і не можу побачити, що моє може бути неправильним.
додано Автор fedorqui, джерело

Перевірена GNU grep

grep -E "BuildStops.BuildStop.AddConsignee:.*[[:digit:]]{5,}ms"
0
додано

Перевірена GNU grep

grep -E "BuildStops.BuildStop.AddConsignee:.*[[:digit:]]{5,}ms"
0
додано

awk solution:

awk '/BuildStops\.BuildStop\.AddConsignee:/ && $NF+0>10000' System_2013626.log
  • $NF+0 will evaluate execution time it in integer discarding the ms.
0
додано

awk solution:

awk '/BuildStops\.BuildStop\.AddConsignee:/ && $NF+0>10000' System_2013626.log
  • $NF+0 will evaluate execution time it in integer discarding the ms.
0
додано

grep "BuildStops \ .BuildStop \ .AddConsignee: \ + [1-9] [0-9] \ {4, \} ms"

\ + після простору відповідає "хоча б одному" пробілу. \ (4, \) після [0-9] означає "принаймні 4" цифри від 0 до 9.

0
додано

grep "BuildStops \ .BuildStop \ .AddConsignee: \ + [1-9] [0-9] \ {4, \} ms"

\ + після простору відповідає "хоча б одному" пробілу. \ (4, \) після [0-9] означає "принаймні 4" цифри від 0 до 9.

0
додано

Як на рахунок

^[1-9]([0-9]){4}

Почніть з цифри 1-9, потім 4 або більше цифр 0

Тому

"BuildStops.BuildStop.AddConsignee: [1-9]([0-9]){4}"
0
додано

цей шаблон може відповідати 10000ms, 100000ms і так далі. Він не відповідає 9999мс.

grep -E 'BuildStops.BuildStop.AddConsignee:[[:space:]]+[[:digit:]]{5,}ms'
0
додано

цей шаблон може відповідати 10000ms, 100000ms і так далі. Він не відповідає 9999мс.

grep -E 'BuildStops.BuildStop.AddConsignee:[[:space:]]+[[:digit:]]{5,}ms'
0
додано