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