比赛后发生grep

时间:2018-10-15 12:52:17

标签: regex linux grep

我正在尝试grep出现两种情况: 1.第一空间之前 2.在行尾之前

示例

-Dcatalina.base=/apps/kio/jal/current/mi_loki_porf -Dcatalina.home=/apps/kio/jal/current/mi_loki_porf
-Djava.io.tmpdir=/apps/kio/jal/current/mi_loki_porf/temp org.apache.catalina.startup.Bootstrap start
  1. 我想提取单词'-Dcatalina.base ='在第一个空格之前的出现,它应该是/ apps / kio / jal / current / mi_loki_porf

  2. 提取单词'-Dcatalina.base'之后但行尾之前的出现,该出现是/ apps / kio / jal / current / mi_loki_porf -Dcatalina.home = / apps / kio / jal /当前/ mi_loki_porf

另外,如果我对比赛后的发生一无所知,该怎么办?比如说'-Dcatalina.base ='之后的出现可以是单词或字母数字,也可以只是特殊字符

-Dcatalina.base=*(76yhg5)
or -Dcatalina.base=123345
or -Dcatalina.base=hellohowareyou
or -Dcatalina.base= *&^%$

我尝试过的

grep -Po '(?<=-Dcatalina.base=).*' my.log

它给了我-Dcatalina.base之后的整个比赛

1 个答案:

答案 0 :(得分:1)

使用perl,您可以执行以下操作:

perl -nE '/(?<=-Dcatalina\.base=)(\S+).*/ && say $1,"\n",$&' my.log

这会将正则表达式应用于文件my.log的每一行,并在匹配时进行打印。

说明:

/                       : regex delimiter
  (?<=                  : positive lookbehind
    -Dcatalina\.base=   : literally
  )                     : end lookbehind
  (\S+)                 : group 1, 1 or more non space
  .*                    : 0 or more any character but newline
/                       : regex delimiter

&&                      : logical and, the following is executed only if the regex matches
say $1,"\n",$&          : print content of group 1, a line break and the whole match

给定示例的结果

/apps/kio/jal/current/mi_loki_porf
/apps/kio/jal/current/mi_loki_porf -Dcatalina.home=/apps/kio/jal/current/mi_loki_porf