Eu tenho um arquivo onde quero extrair todas as correspondências.
- 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ª.
- Inclua na saída a palavra e o enésimo caractere correspondente.
- Produza uma correspondência por linha.
- Pode haver qualquer número de correspondências em qualquer linha.
- 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.