使用shell脚本查找子字符串的麻烦

时间:2014-03-11 12:11:23

标签: shell substring

我的文件格式如下:

./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脚本查找每行的子串并将其提取到单独的文件中:

  1. “http://”和“/”之间的域名(domain1.com,domain2.com,...)
  2. 该域名的BANKID(可以在不同的位置)
  3. 所以我可以在输出中拥有一对域和ID。

    我认为cut在这里不起作用。我可以使用什么工具?

1 个答案:

答案 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要求,sedBANKID是一个更好的工作。