将未知子字符串与RegEx

时间:2017-02-21 20:52:23

标签: regex linux sed grep

如何使用正则表达式获取未知子字符串?我知道想要的字符串之前和之后的内容,但我不希望结果中有已知部分。

示例文字:

jhgjgjgvocher_SOMETHINGHERE.dbhjjkghjkg
vocher_SOMETHINGELSE.db

我正在寻找' SOMETHINGHERE'和' SOMETHINGELSE'仅

vocher_.db始终在相关部分之前和之后,但不应出现在结果中。

一个有效的解决方案是:

cat test | egrep -o "vocher_.*\.db" | cut -d "_" -f2 | cut -d "." -f1

......但你知道它很难看。

是否可以使用正则表达式精确搜索未知部分(在这种情况下只有.*部分),或者我是否需要使用像sed这样的东西?有更好的解决方案吗?

2 个答案:

答案 0 :(得分:0)

使用perl的简单解决方案如下:

perl -ne 'if (/vocher_(.*)\.db/){ print "$1\n";}' test_file.txt

这在文件上逐行迭代,只打印所需的部分。

答案 1 :(得分:0)

使用以下 grep 方法:

grep -Po '(?<=vocher_).+(?=\.db)' test

-P - 允许Perl正则表达式

-o - 仅打印匹配的子字符串

输出如下:

SOMETHINGHERE
SOMETHINGELSE