Сохранить конкретное совпадение в переменную - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть файл, который содержит следующий пример:

*
ABCD Z12,
$ (67,EAGL165XQ.58,AD=0.0001,SF=7.0,TC=EAGL165XQ.58,LY={70},DT={0},BX=0.0,BY=0.0,UX=240.0,UY=8000.0)
ROWS 41860/111496
*

Все, что мне нужно, это получить первое вхождение EAGL165XQ.58 в переменную.Как я могу сделать это с помощью регулярных выражений?

Ответы [ 3 ]

0 голосов
/ 20 апреля 2019

Вы можете сделать это с помощью sed, но вы должны использовать диапазон адресов 0,addr2 (см. sed (1) - страница руководства Linux ), чтобы установить sed в концеего диапазон в первом совпадении, например,

$ sed -n '0,/.*EAGL/s/^[^,]*[,]\(EAGL[^,]*\),.*$/\1/p' < file
EAGL165XQ.58

Пояснение

  • с использованием шаблона 0,addr2 перед обычной заменой s/find/replace, где
  • find ищет первую запятую [,], за которой следует EAGL, используя
  • группу захвата \(...\) для хранения соответствующего EAGL... до следующей запятой и где
  • обратная ссылка \1 используется как replace для замены всей строки содержимым, захваченным между \(...\)

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

$ myvar=$(sed -n '0,/.*EAGL/s/^[^,]*[,]\(EAGL[^,]*\),.*$/\1/p' < file)
$ echo $myvar
EAGL165XQ.58

Посмотрите вещи и дайте мне знать, если у вас есть дополнительные вопросы.

0 голосов
/ 21 апреля 2019

пробовал на GNU Bash

while IFS=',=' read -r s
do
 [[ $s =~ EAGL165XQ\.58 ]] &&{ var=${BASH_REMATCH} ;break; }
done <file

пробовал на GNU SED

var=$(sed  -En 's/[^,=]*.(EAGL165XQ.58).*/\1/p' file)


echo $var
EAGL165XQ.58
0 голосов
/ 20 апреля 2019

Этот RegEx может помочь вам получить первый экземпляр вашего ввода, который ограничен слева с помощью , :

,([A-Z0-9]+\.[0-9]{2})

Вы можете просто позвонить, используя $1.

enter image description here

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