すべての一致を抽出したいファイルがあります。
- 各一致は単語で始まり、各一致の後にn番目の文字が発生します(この場合は2番目)。
- 出力に単語と一致するn番目の文字が含まれています。
- 1行に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回出る一連の一致を探します。