我正在尝试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
我想提取单词'-Dcatalina.base ='在第一个空格之前的出现,它应该是/ apps / kio / jal / current / mi_loki_porf
提取单词'-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之后的整个比赛
答案 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