LINUX.ORG.RU
ФорумAdmin

bash


0

1

Всем привет

Можно как то с помощью bash-a в файле найти слово определенной длины, длина его 11 символов(цифры и буквы в ВЕРХНЕМ регистре)

Спасибо


Ответ на: комментарий от pyatak123

Спасибо за ответ никак не получается реализовать следующую схему. Есть файлик скажем file.txt находим слово содержащее 11 символов по шаблону

[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z] 
и присваиваем переменной $a это слово. Например Смотрим файлик file.txt находим первое попавшееся слово которое соответствует шаблону
[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]
например 11FFDDAAGD5 присваиваем его переменной $a и выводим
echo $a
вывод будет 11FFDDAAGD5.

mkgeka ()
Ответ на: комментарий от pyatak123

11FFDDAAGD5 это как пример слово которое подошло под шаблон

[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z
оно может быть другим

mkgeka ()
Ответ на: комментарий от pyatak123

Вопрос не читай @ сразу отвечай.

первое попавшееся

file=`echo "qwe qwe FGR YTU QWE ASD ZXC QW"`;a=(`echo "$file"|egrep -o "[A-Z]{3}"`);echo ${a[0]}

${a[0]} - вернёт первый элемент массива.

Ну можно нагородить head -n1...

Umberto ★☆ ()
Последнее исправление: Umberto (всего исправлений: 1)
Ответ на: комментарий от mkgeka

Хватит уже это полотно писать то...

[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z
А если вам слово из 100 символов надо будет найти, у вас монитора не хватит чтоб 100 [a-z0-9] написать, учите уже квантификаоры. Что у вас не получается? Я ж вам уже показал как используя шаблон рег.выражения получить результат и положить его в переменную. Если у вас слово другое , то будет и другой шаблон.

pyatak123 ()
Ответ на: комментарий от Umberto

ок попробую по другому объяснить есть файлик file.txt с помощью команды

awk '/[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]/ {print}' file.txt
нашел все строки которые содержат
/[0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z][0-9A-Z]/
как теперь мне с каждой строки выбрать первых 11 символов и присвоить их переменной $a чтоб потом я мог использовать эту переменную.

Спасибо

mkgeka ()
Ответ на: комментарий от mkgeka

выбрать первых 11 символов

echo "$file"|egrep -o "[A-Z]{3}"

заменить на это:

echo "$file" | egrep -o "[0-9A-Z]{11}" | cut -c -11

попробую по другому объяснить

пример бы привел входных и выходных данных.

anonymous ()
Ответ на: комментарий от anonymous

Спасибо

Aug 30 16:05:06 mail clamsmtpd: 1027EC: from=ck@mydomain.com, to=mk@mydomain.com, status=CLEAN
Aug 30 16:05:06 mail postfix/qmgr[1949]: 50CD76E734F: from=<ck@mydomain.com>, size=651074, nrcpt=1 (queue active)
Aug 30 16:07:05 mail postfix/qmgr[1949]: 7D7EE6E7359: from=<ck@mydomain.com>, size=925831, nrcpt=1 (queue active)
Aug 30 16:07:05 mail postfix/pickup[11460]: C39A86E736F: uid=5001 from=<ck@mydomain.com>
Aug 30 16:07:05 mail postfix/qmgr[1949]: C39A86E736F: from=<ck@mydomain.com>, size=925947, nrcpt=1 (queue active)
Aug 30 16:07:06 mail postfix/qmgr[1949]: D675E6E7359: from=<ck@mydomain.com>, size=926165, nrcpt=1 (queue active)
Aug 30 16:07:06 mail clamsmtpd: 1027F0: from=ck@mydomain.com, to=te@mydomain.com, status=CLEAN
Aug 30 16:10:00 mail postfix/qmgr[1949]: 97F856E737E: from=<ck@mydomain.com>, size=134028, nrcpt=1 (queue active)
Aug 30 16:10:01 mail postfix/pickup[11460]: 4DFA36E7380: uid=5001 from=<ck@mydomain.com>
Aug 30 16:10:01 mail postfix/qmgr[1949]: 4DFA36E7380: from=<ck@mydomain.com>, size=134350, nrcpt=1 (queue active)^C
Aug 30 16:10:01 mail clamsmtpd: 1027F8: from=ck@mydomain.com, to=personal@mydomain.com, status=CLEAN
Aug 30 16:10:01 mail postfix/qmgr[1949]: 65B586E737E: from=<ck@mydomain.com>, size=134574, nrcpt=12 (queue active)
Aug 30 16:27:33 mail postfix/pipe[19525]: 4C2956E7393: to=<ck@mydomain.com>, relay=spamfilter, delay=1.9, delays=0.96/0/0/0.9, dsn=2.0.0, status=sent (delivered via spamfilter service)
нужно с лога почтовика вытащить кто кому что отправлял. Решил делать так:

1.Сначала сортирую все по ID письма [0-9A-Z]{11,11}

2.Потом с того что получилось вытаскиваю первых 11 символов из строки(у нас это время например Aug 30 16:1)

3. Присваиваю это значение переменной и делаю выборку уже по времени с лога почтовика

4. Записую вывод в файлик

У меня пол тысячи пользователей на почтовике нужно за месяц вытащить по конретным пользователя(порядка 25) кто куда что отправлял в «красивом виде» так сказать что б мог понять даже бухгалтер. Грубо говоря нужно отсеять все лишнее. Пробовал сортировать по пользователям немног нето, не всегда понятно кто отправлял ему и т.д.

Спасибо

mkgeka ()
Ответ на: комментарий от mkgeka

У меня пол тысячи пользователей на почтовике нужно за месяц вытащить по конретным пользователя(порядка 25) кто куда что отправлял в «красивом виде» так сказать что б мог понять даже бухгалтер. Грубо говоря нужно отсеять все лишнее. Пробовал сортировать по пользователям немног нето, не всегда понятно кто отправлял ему и т.д.

и как вы собрались это определить исходя из ID Postfix'а в логе выше? Вот например -

Aug 30 16:05:06 mail postfix/qmgr[1949]: 50CD76E734F: from=<ck@mydomain.com>, size=651074, nrcpt=1 (queue active)
Aug 30 16:07:05 mail postfix/qmgr[1949]: 7D7EE6E7359: from=<ck@mydomain.com>, size=925831, nrcpt=1 (queue active)

Где тут вообще фигурирует кому адресованы эти письма? Я предлагаю ознакомиться с документацией Postfix, наверняка ему можно указать в каком формате вести логирование чтобы добавить туда получателя - тогда задача станет решаемой.

FreeBSD ★★★ ()
Ответ на: комментарий от FreeBSD

Спасибо за ответ куда идет письмо видно, чуть ниже идут строки, потому и решил сортировать по времени. Но за идею спасибо в будущем можно будет использовать, в нашем же случаи нужно сделать анализ логов которые уже есть.

mkgeka ()
Ответ на: комментарий от FreeBSD

по поводу как я собираюсь найти по id письма, то руками я делал все отлично получается, картина довольно ясная видно кто куда что отправлял, проблема в том что таких у меня записей очень много, в ручную сделать нереально.

Может есть софт какой то который умеет парсить логи постфикса. Пробовал штатными средствами типа pflogsumm, немного не то.

Спасибо

mkgeka ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.