Regex 将未知子字符串与正则表达式匹配

Regex 将未知子字符串与正则表达式匹配,regex,linux,sed,grep,Regex,Linux,Sed,Grep,如何获得带有正则表达式的未知子字符串?我知道想要的字符串前后是什么,但我不希望结果中包含已知部分 示例文本: jhgjgjgvocher_SOMETHINGHERE.dbhjjkghjkg vocher_SOMETHINGELSE.db 我只想找“某物在这里”和“某物在这里” vocher和.db始终在相关部分之前和之后,但不应出现在结果中 一个有效的解决办法是: cat test | egrep -o "vocher_.*\.db" | cut -d "_" -f2 | cut -d "."

如何获得带有正则表达式的未知子字符串?我知道想要的字符串前后是什么,但我不希望结果中包含已知部分

示例文本:

jhgjgjgvocher_SOMETHINGHERE.dbhjjkghjkg
vocher_SOMETHINGELSE.db
我只想找“某物在这里”和“某物在这里”

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

一个有效的解决办法是:

cat test | egrep -o "vocher_.*\.db" | cut -d "_" -f2 | cut -d "." -f1
……但你知道这很难看


是否可以使用正则表达式精确搜索未知部分(在本例中,仅搜索
*
部分),或者是否需要使用sed之类的工具?有更好的解决方案吗?

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

perl -ne 'if (/vocher_(.*)\.db/){ print "$1\n";}' test_file.txt
这将逐行迭代文件,只打印所需的部分。

使用以下grep方法:

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

尝试将
egrep-o“vocher.*\.db”
替换为
grep-oP”(?@Wiktor:对,但不需要星号后面的问号。@JosefScript非贪婪的
*?
对于看起来像
vocher\u SOMETHINGHERE.dbblahvocher\u SOMETHINGELSE.dbblah
的输入是必需的。此解决方案的问题是它没有利用OP在问题中的附加信息。他想要
vouc她将
放在所需文本之前,文件应为
.db
。如果使用此代码,则无论是否满足其他条件,都将在下划线后获取所有内容。@ahjohnston25,我已再次阅读了该问题并修复了我的解决方案,现在一切正常
SOMETHINGHERE
SOMETHINGELSE