Как выкусить подстроку из строки?

Пишу скрипт на баше. он ищет в логах нужные мне строки, потом мне надо из строки выкусить в файл нужную мне подстроку .
вот строка:
May 31 04:12:10 SSCK01 dhcpd[16691]: [ID 988538 local7.notice] [tid:30] NTCE DHCPOP(101) Protocol: DHCPDiscover from STRING-K01 PON 1/1/02/01:12.1.1 (chAddr=00:13:77:6d:44:6b) via 81.91.202.1.

вот это надо выкусить:
STRING-K01 PON 1/1/02/01:12.1.1
Я сначала выкусывал с помощью awk {print $13,$14,$15} но потом заметил что количество полей меняется в других строках и выкусывает не то что надо.
Думаю правильно выкусывать по регулярному выражению:
grep -E -o "\b[STRING-]+[X00,K01-99]+" "+[PON]+" "+[1/1/01-09/01-09/:01-64.1.1]\b"

но такая конструкция выдает ошибку.
  • Вопрос задан
  • 218 просмотров
Решения вопроса 2
xotkot
@xotkot
хорошо есть и хорошо весьма
если " STRING-" и " PON " являются определяющими то можно сделать так:

$ awk -F" STRING-| PON " '{print "STRING-"$2" PON "$3 }' | awk '{print $1" "$2" "$3}'  fileIn >> fileOut
Ответ написан
@abcd0x00
[guest@localhost ~]$ s="May 31 04:12:10 SSCK01 dhcpd[16691]: [ID 988538 local7.notice] [tid:30] NTCE DHCPOP(101) Protocol: DHCPDiscover from STRING-K01 PON 1/1/02/01:12.1.1 (chAddr=00:13:77:6d:44:6b) via 81.91.202.1."
[guest@localhost ~]$ 
[guest@localhost ~]$ echo "$s" | sed 's/.* from //; s/ (.*//'
STRING-K01 PON 1/1/02/01:12.1.1
[guest@localhost ~]$
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами
cat your_log | perl -e 'while(<>){ if ($_ =~/.*from\s+(STRING.*)\s+\(chAddr/){ print $1."\n"; }}'

ну либо так
cat your_log | grep -E -o 'STRING-K\d{2}\s+PON\s+\d\/\d\/\d{2}\/\d{2}:\d{2}\.\d\.\d'
Ответ написан
pirxon
@pirxon Автор вопроса
cat your_log | grep -E -o 'STRING-K\d{2}\s+PON\s+\d\/\d\/\d{2}\/\d{2}:\d{1,2}\.\d\.\d'

нашел онлайн редактор регулярок. эта регурялка правильная но почему не сработала.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы