LINUX.ORG.RU
ФорумAdmin

bash


0

1

Всем привет

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

Спасибо



Последнее исправление: mkgeka (всего исправлений: 4)

вроде получилось

cat file.txt | grep [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.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
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.