単語とその単語の後のn番目の文字の一致の間のすべての一致を抽出します

単語とその単語の後のn番目の文字の一致の間のすべての一致を抽出します

すべての一致を抽出したいファイルがあります。

  1. 各一致は単語で始まり、各一致の後に文字が n 回目に出現すると終了します (この場合は 2 回目)。
  2. 出力に単語と n 番目に一致する文字を含めます。
  3. 1 行につき 1 つの一致を出力します。
  4. どの行にも任意の数の一致が存在する可能性があります。
  5. 各一致は同じ行にあります。つまり、一致は 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 回続くものに一致します。

関連情報