提取單字與該單字之後的第 n 個字元匹配之間的所有匹配項

提取單字與該單字之後的第 n 個字元匹配之間的所有匹配項

我有一個文件,我想在其中提取所有匹配項。

  1. 每個匹配都以一個單字開始,並以每個匹配後第 n 次出現某個字元(在本例中為第 2 次)結束。
  2. 在輸出中包含單字和第 n 個匹配字元。
  3. 每行輸出一個匹配項。
  4. 任何行上可以有任意數量的匹配項。
  5. 每個匹配都在同一行中:這意味著匹配不會用 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}匹配非連字符字符(可能為空)序列,後面跟著連字符字符兩次。

相關內容