すべての一致を抽出したいファイルがあります。
- 各一致は単語で始まり、各一致の後に文字が n 回目に出現すると終了します (この場合は 2 回目)。
- 出力に単語と n 番目に一致する文字を含めます。
- 1 行につき 1 つの一致を出力します。
- どの行にも任意の数の一致が存在する可能性があります。
- 各一致は同じ行にあります。つまり、一致は CR、LF、CRLF で 2 行に分割されません。
例: 'user' と各 'user' の後の 2 番目の '-' の一致との間のすべての一致を抽出します。
入力ファイル:
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}
ハイフン以外の文字のシーケンス(空の場合もある)にハイフン文字が 2 回続くものに一致します。