我的文件格式如下:
./07/00-post.log:Referer: http://domain1.com/example/launch.jsp?BANKID=123&SOMEPARAM=123&...
./07/00-post.log:Referer: http://domain2.com/example/launch.jsp?PARAM=313&BANKID=13&...
...
...
./07/00-post.log:Referer: http://domainN.com/example/launch.jsp?BANKID=3213
需要使用shell脚本查找每行的子串并将其提取到单独的文件中:
所以我可以在输出中拥有一对域和ID。
我认为cut在这里不起作用。我可以使用什么工具?
答案 0 :(得分:1)
由于文字不是你可以使用grep
:
$ grep -Po '(?<=http://)[^/]*|(?<=BANKID=)\d*' file
domain1.com
123
domain2.com
13
domainN.com
3213
实际上,它正在加入不同的grep
表达式:
获取BANKID=
之后的数字:
$ grep -Po '(?<=BANKID=)\d*' file
123
13
3213
并在http://
之后到下一个/
获取域名:
$ grep -Po '(?<=http://)[^/]*' file
domain1.com
domain2.com
domainN.com
请注意,cut
是文本格式为同构时使用的工具。它适用于域部分:
$ cut -d/ -f5 file
domain1.com
domain2.com
domainN.com
但总的来说,根据grep
要求,sed
或BANKID
是一个更好的工作。