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

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

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

  1. 各一致は単語で始まり、各一致の後にn番目の文字が発生します(この場合は2番目)。
  2. 出力に単語と一致するn番目の文字が含まれています。
  3. 1行に1つの一致を出力します。
  4. 1行に一致するものがいくつかあります。
  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回出る一連の一致を探します。

関連情報