Extraia todas as correspondências entre uma palavra e a enésima correspondência de caracteres após essa palavra

Extraia todas as correspondências entre uma palavra e a enésima correspondência de caracteres após essa palavra

Eu tenho um arquivo onde quero extrair todas as correspondências.

  1. Cada correspondência começa com uma palavra e termina na enésima vez que um caractere ocorre após cada correspondência, neste caso a 2ª.
  2. Inclua na saída a palavra e o enésimo caractere correspondente.
  3. Produza uma correspondência por linha.
  4. Pode haver qualquer número de correspondências em qualquer linha.
  5. Cada correspondência está na mesma linha: o que significa que uma correspondência não é dividida entre duas linhas com CR, LF, CRLF.

Exemplo: extraia todas as correspondências entre 'usuário' e a segunda correspondência de '-' após cada 'usuário':

Arquivo de entrada:

sample text user=data-no value /) xx- fdfd\n
abcd

abcd user-- example$% user-%&?@:-useruser**-#<>\"-user0-
gg-
--
useruser------data
user-user------data

Arquivo de saída priorizando a correspondência inicial (palavra) e depois pesquisando adiante:

user=data-no value /) xx-
user--
user-%&?@:-
useruser**-#<>\"-
useruser--
user-user-

Arquivo de saída priorizando a enésima correspondência final (palavra) e lida de trás para frente:

user=data-no value /) xx-
user--
user-%&?@:-
user**-#<>\"-
user--
user-user-

Responder1

Não entendo o que significa "priorizar" neste contexto, mas você poderia usar um simples grep:

$ grep -Eo 'user([^-]*-){2}' file
user=data-no value /) xx-
user--
user-%&?@:-
useruser**-#<>\"-
useruser--
user-user-

([^-]*-){2}corresponde a uma sequência (possivelmente vazia) de caracteres sem hífen seguida por um caractere de hífen, duas vezes.

informação relacionada