Это даст вам хорошие шансы.
cat../logs/em2.log.1 |grep -i 192.168.21.15 |awk '{system("date"); print $1}'
системная функция позволяет анализировать команду bash в потоке awk.
Попробуйте это,
grep -o '[^`]*/cooler[^`]*' one.txt
/var/log/cooler_x86_64_someos8.4/config.cf
-o
Печатать только совпавшие я смог решить проблему с помощьюsed 's:[^/]*\(.*\)'\''.*$:\1:'
sed -n -r '/^cooler/s|.*['\''`"]([^'\''"`]+).*|\1|gp' one.txt
-n
без звука /^cooler/
узор gp
-результат вывода .*['\''`"]
-группа символов перед кавычками (' `")([^'\''"`]+)
-группа символов после кавычки, за исключением следующих кавычек (' `")
Начнем с выбора линии интереса. Эта строка начинается со строкиcooler:
:
$ sed -e '/^cooler:/!d' file
cooler:some default cooler string `/var/log/cooler_x86_64_someos8.4/config.cf'
Выражение /^cooler:/!d
удалит из ввода все строки, которые не соответствуют /^cooler:/
.
Затем мы извлекаем вещь между обратной цитатой и цитатой:
$ sed -e '/^cooler:/!d' -e "s/.*\`\([^']*\)'.*/\1/" file
/var/log/cooler_x86_64_someos8.4/config.cf
Выражение s/.*\`\([^']*\)'.*/\1/
заменяет всю строку строкой внутри `...'
. Обратная кавычка должна быть экранирована, так как это выражение заключено в двойные кавычки (, в противном случае это будет началом подстановки команд в оболочке ).
Вы также можете выполнить извлечение пути в два этапа. :Удалите все до обратной кавычки включительно, а затем удалите все после одинарной кавычки включительно. Это может даже выглядеть немного опрятнее:
$ sed -e '/^cooler:/!d' -e 's/.*`//' -e "s/'.*//" file
/var/log/cooler_x86_64_someos8.4/config.cf
Еще пара вариантов регулярных выражений
Использованиеsed
sed -n '/^cooler:/s/^.*`\(.*\)'"'"'/\1/p'
Это можно объяснить следующим образом
-n
ничего не печатать, если нет совпадения ^cooler:
ищите cooler:
в начале строки s/old/new/p
заменить old
на new
и вывести результат, если замена прошла успешно ^.*`\(.*\)'"'"'
сопоставляет все с обратной кавычкой, затем фиксирует все, что находится внутри квадратных скобок (
... )
, затем фиксирует одинарную кавычку до конца строки. '"'"'
— пустая оболочка -первый '
завершает исходную строку в одинарных -кавычках, "'"
заключает в кавычки одинарную -кавычку, последний '
перезапускает одинарную -строку в кавычках \1
в замещающей части ссылается на захваченную строку из сопоставления с образцом Использование GNUgrep
grep -oP '^cooler:.*`\K'"[^']*"
Это можно объяснить почти так же, как и раньше
-oP
выводить только совпадения и использовать регулярные выражения perl (PCRE )для синтаксического анализа \K
граница :все до этого сопоставляется, но отбрасывается; все последующее включается в результат [^']*
соответствует всему, кроме одной -кавычки $ sed -ne '
/^cooler:/y/`'\''/\n\n/
s/.*\n\(.*\)\n.*/\1/p
' one.txt
Это posix sed, и мы меняем кавычки и обратную кавычку на новые строки. Тогда путь Зажат между двумя новыми строками.