У меня есть содержимое файла как
0::chkconfig --list autofs::
autofs 0:off 1:off 2:on 3:on 4:on 5:on 6:off
1::grep "^PROMPT=" /etc/sysconfig/init::
PROMPT=yes
2::rpm -q prelink::
prelink-0.4.0-2.el5
3::sysctl fs.suid_dumpable::
fs.suid_dumpable = 0
4::stat /etc/motd::
File: `/etc/motd'
Size: 17 Blocks: 16 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 10125343 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-04-08 07:54:03.000000000 +0500
Modify: 2019-03-30 19:22:13.000000000 +0500
Change: 2019-03-30 19:22:13.000000000 +0500
5::stat /etc/issue::
File: `/etc/issue'
Size: 52 Blocks: 16 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 10125494 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-03-30 19:12:13.000000000 +0500
Modify: 2012-02-25 22:01:14.000000000 +0500
Change: 2019-03-30 23:54:57.000000000 +0500
Я хочу, чтобы первый матч схватил everything
меня между
:: <everything>\d::
примечание:
:: сопровождается \ n новой строкой (хочу пропустить сначала ::)
\ d для регулярных выражений может быть 3 места 999 (макс.).
Второе совпадение - поиск в первом совпадении.
например, для 5::
Access: (0644/-rw-r--r--)
захватить доступ 0644
Второе правило соответствия Критерии не фиксированы и будут меняться в зависимости от требования, но первое правило соответствия совпадает.
Результатом финального совпадения будет только совпадающая строка, а не вся запись или результат.
Итак, пока я пытался с
cat org_op.2019.04.08-12.49.38 | awk 'f{print;f=0} /^3::/{f=1}'
что даст мне
` fs.suid_dumpable = 0`
, но совпадения не масштабируются до многострочных, дает только 1 строку ниже соответствия
Я также пытаюсь использовать awk -F [::,\d""]
, но не могу найти \ d регулярное выражение в скобках.
ЗАКЛЮЧИТЕЛЬНЫЙ ВЫХОД
4::stat /etc/motd::
File: `/etc/motd'
Size: 17 Blocks: 16 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 10125343 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-04-08 07:54:03.000000000 +0500
Modify: 2019-03-30 19:22:13.000000000 +0500
Change: 2019-03-30 19:22:13.000000000 +0500
СОСТОЯНИЕ № 1
Какой блок получить, это пользовательский ввод, например, стартовый тег \ d ::, где '\ d' предоставлен пользователем, и он закончится до начала нового блока, поясненного выше.
СОСТОЯНИЕ № 2
См. fd00h/64768d
, но это условие будет изменено и будет записано уникально для каждого блока, его переменная соответствует, я хочу получить awk, который я могу увеличить на основе этих требований к форматированию.
ПРИМЕЧАНИЕ: из предоставленного пользователем, я имею в виду, что он будет задан как переменная, например, $ var
ИСПЫТАНИЯ
cat org_op.2019.04.08-12.49.38 | awk -v id=4 -v RS= -F ':' '($1==id) && $17~/\(([0-9]+)\// { print $17}'
(0644/-rw-r--r--) Uid
Где, на самом деле, я хочу, чтобы это регулярное выражение совпадало /\([0-9][0-9][0-9][0-9]\//)
0644