不要输出第一个grep搜索词

时间:2014-02-27 21:13:22

标签: regex bash

所以我在文件中有以下内容:

JAVA_OPTS="-Djavax.net.ssl.trustStore=/home/blah/blah.jks -Djavax.net.ssl.trustStorePassword=password"

我正在使用以下命令:

cat file.txt | grep -Eo "Store=[^ ]*.jks"

并获得

Store=/home/blah/blah.jks

我该怎么做才能获得:

/home/blah/blah.jks

2 个答案:

答案 0 :(得分:3)

改为使用sed,并动态编辑匹配项:

sed -rn 's/^.+Store=([^ ]*.jks).*$/\1/p' file.txt

-n选项会禁止打印,替换后的p命令会重新打开,但仅限于匹配的行。 -r选项意味着更容易使用的正则表达式引擎。

顺便说一下。不要将cat传递给这些Unix实用程序(grep,sed,tr,awk等)。他们都将文件名理解为最后的参数。一个过程总是比两个过程好。

答案 1 :(得分:2)

您可以使用perl扩展程序中的\K

$ grep -oP 'Store=\K[^ ]*.jks' file.txt 
/home/blah/blah.jks