我有一个文件,我想在其中提取所有匹配项。
- 每个匹配都以一个单词开始,并以每个匹配后第 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}
匹配非连字符字符(可能为空)序列,后跟连字符字符两次。