https://textmap.com/api/3.0/repository/123456-7654-1234-a122-7654321/import/8888-2222-1234-a122-45555/status
https://textmap.com/api/3.0/repository/123456-7654-1234-a122-7654321/import/8888-2222-1234-a122-45555/status
https://textmap.com/api/3.0/repository/123456-7654-1234-a122-7654321/import/8888-2222-1234-a122-45555/status
https://textmap.com/api/3.0/repository/123456-7654-1234-a122-7654321/import/8888-2222-1234-a122-45555/status
我需要在存储库和导入后提取不同的术语
所需的输出:
123456-7654-1234-a122-7654321
8888-2222-1234-a122-45555
我尝试使用grep -o但没有运气
答案 0 :(得分:1)
假设文件中包含链接,则可以执行以下操作:
$ grep -oP '(repository|import)/\K[^/]+' file
123456-7654-1234-a122-7654321
8888-2222-1234-a122-45555
123456-7654-1234-a122-7654321
8888-2222-1234-a122-45555
123456-7654-1234-a122-7654321
8888-2222-1234-a122-45555
123456-7654-1234-a122-7654321
8888-2222-1234-a122-45555
并仅获取唯一值:
$ grep -oP '(repository|import)/\K[^/]+' file | sort -u
123456-7654-1234-a122-7654321
8888-2222-1234-a122-45555
-o
的意思是“仅打印行中匹配的部分”,而-P
则启用Perl兼容的正则表达式。 \K
是PCRE功能,基本上意味着“忘记到目前为止所有匹配的内容”。在这里,我们使用它来仅匹配字符串repository/
或字符串import/
之后的行的一部分,并将其丢弃,使其不包含在输出中。然后,我们寻找一个或多个非/
([^/]+
)的最长延伸。
如果您需要每对都在同一行上,请使用:
$ perl -pe 's|.*/repository/([^/]+)/import/([^/]+)/.*|$1 $2|' file | sort -u
123456-7654-1234-a122-7654321 8888-2222-1234-a122-45555