Это не подходит для grep
, который предназначен для фильтрации, а не для извлечения.
Вместо этого вы можете использовать perl
:
perl -pe 's/.*\^A18=([^^]+).*/$1/' <<< '^A15=0^A18=20170924065847986457^A21=0^A22=2'
Это выводит: 20170924065847986457
В соответствии с запросом (gnu) grep:
echo "^A15=0^A18=20170924065847986457^A21=0^A22=2" | grep -oP "A18=\K\d+"
выход:
20170924065847986457
\ K - это короткая и эффективная форма (? <= Pattern), которую вы используете в качестве утверждения просмотра назад нулевой ширины перед текстом, который вы хотите вывести.
Пожалуйста, избегайте вопросов "Дай мне код". Вместо этого покажите сценарий, над которым вы работаете, и укажите, в чем проблема. Также см. Сколько исследовательских усилий ожидается от пользователей Stack Overflow?