提取单词与该单词之后的第 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}匹配非连字符字符(可能为空)序列,后跟连字符字符两次。

相关内容