У меня есть файл, из которого я хочу извлечь все совпадения.
- Каждое совпадение начинается со слова и заканчивается n-ным появлением символа после каждого совпадения, в данном случае вторым.
- Включить в вывод слово и n-ный совпадающий символ.
- Выводить по одному совпадению в каждой строке.
- В любой строке может быть любое количество совпадений.
- Каждое совпадение находится в одной строке: это означает, что совпадение не разделено между двумя строками с CR, LF, CRLF.
Пример: извлечь все совпадения между «user» и вторым совпадением «-» после каждого «user»:
Входной файл:
sample text user=data-no value /) xx- fdfd\n
abcd
abcd user-- example$% user-%&?@:-useruser**-#<>\"-user0-
gg-
--
useruser------data
user-user------data
Выходной файл с приоритетом начального совпадения (слова) и последующим поиском вперед:
user=data-no value /) xx-
user--
user-%&?@:-
useruser**-#<>\"-
useruser--
user-user-
Выходной файл с приоритетом на конечное n-ное совпадение (слово) и чтением в обратном порядке:
user=data-no value /) xx-
user--
user-%&?@:-
user**-#<>\"-
user--
user-user-
решение1
Я не понимаю, что означает «приоритизация» в данном контексте, но вы можете использовать простую команду grep:
$ grep -Eo 'user([^-]*-){2}' file
user=data-no value /) xx-
user--
user-%&?@:-
useruser**-#<>\"-
useruser--
user-user-
([^-]*-){2}
соответствует (возможно пустой) последовательности символов, не являющихся дефисом, за которой дважды следует символ дефиса.