Parse value after tag enclosed in parenthesis

I have the following data in a file I am reading into $p in a while loop. I grep the line ($p) for PID, APPLTAG, UOWLOGDA and UOWLOGTI. When I find the tag present, I want to extract the value in the paren following the tag.

AMQ8276: Display Connection details.
   CONN(4C521F5F01501624)
   EXTCONN(414D5143534154322020202020202020)
   TYPE(CONN)
   PID(27948)
   APPLTAG(WebSphere MQ Client for Java)
   UOWLOGDA(2020-07-29)                    UOWLOGTI(11.50.30)
AMQ8276: Display Connection details.
   CONN(4C521F5F9920182E)
   EXTCONN(414D5143534154322020202020202020)
   TYPE(CONN)
   PID(23273)                              APPLTAG(service.core.EnricherMain)
   UOWLOGDA(2020-07-29)                    UOWLOGTI(11.50.46)
1
задан 29 July 2020 в 22:54

1 ответ

Well, you can grep just the values with a lookbehind:

$ grep -Po '(?<=PID\(|APPLTAG\(|UOWLOGDA\(|UOWLOGTI\()[^)]+' file
27948
WebSphere MQ Client for Java
2020-07-29
11.50.30
23273
service.core.EnricherMain
2020-07-29
11.50.46
  • -P Perl style regex
  • -o print the matched pattern only
  • (?<=things)stuff get the stuff after things (lookbehind assertion)
  • \( the literal opening parenthesis
  • thing1|thing2 alternation - match thing1 or thing2
  • [^)] + некоторые символы, которые не являются закрывающей скобкой

Это выражение работает на вашем образце, но может быть более надежным добавить \ b к паттерны поиска, чтобы они были перехвачены только в том случае, если перед ними стоят разрывы слов (начало строки, пробел, табуляция и т. д.), если тот же паттерн может быть конечной частью слова. Кроме того, если есть вероятность, что за соответствующим словом, за которым следует открывающая скобка, без закрывающей скобки, которую вы не хотите перехватывать, вы можете явно посмотреть вперед для закрывающей скобки, добавив (? = \)) здесь, чтобы более надежно получить только символы между совпадающими скобками:

grep -Po '(?<=\bPID\(|\bAPPLTAG\(|\bUOWLOGDA\(|\bUOWLOGTI\()[^)]+(?=\))'

Я не уверен, подходит ли этот подход для вашей цели, хотя.

Большое спасибо fra-san за , предложившего улучшения на этот ответ:)

1
ответ дан 2 August 2020 в 22:03

Другие вопросы по тегам:

Похожие вопросы: