Почему ruby печатает всю строку ввода при совпадении - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь получить IP-адреса из файла журнала в строках, которые содержат строку 'PyMon go'. Это команда, которую я выполняю:

ruby -ne "print $1 if /from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):.*PyMongo/" /usr/local/var/log/mongodb/mongo.log

Вывод выглядит так:

2020-04-19T21:09:35.567-0400 I  NETWORK  [conn31491] received client metadata from 123.234.123.234:53016 conn31491: { driver: { name: "PyMongo", version: "3.10.1" }, os: { type: "Linux", name: "Linux", architecture: "x86_64", version: "4.9.0-12-amd64" }, platform: "CPython 3.5.3.final.0" }

Я использовал ту же конструкцию в irb, и код печатает только IP-адрес , Почему при запуске в командной строке он отображает всю строку ввода?

Ответы [ 2 ]

4 голосов
/ 21 апреля 2020

Чтобы избежать расширения оболочки переменной $1, вы можете использовать команду в одинарных кавычках :

ruby -ne 'print $1 if /from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):.*PyMongo/' /usr/local/var/log/mongodb/mongo.log
0 голосов
/ 22 апреля 2020

Спасибо за ваши ответы и комментарии. На всякий случай, если кто-то столкнется с подобной проблемой, я хотел бы опубликовать свое окончательное решение.

ruby -ne 'print "#{$1}\n" if from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):.*PyMongo/' /usr/local/var/log/mongodb/mongo.log

Без интерполяции строк я получил бесконечную строку цифр и точек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...