如何使用正则表达式获取未知子字符串?我知道想要的字符串之前和之后的内容,但我不希望结果中有已知部分。
示例文字:
jhgjgjgvocher_SOMETHINGHERE.dbhjjkghjkg
vocher_SOMETHINGELSE.db
我正在寻找' SOMETHINGHERE'和' SOMETHINGELSE'仅
vocher_
和.db
始终在相关部分之前和之后,但不应出现在结果中。
一个有效的解决方案是:
cat test | egrep -o "vocher_.*\.db" | cut -d "_" -f2 | cut -d "." -f1
......但你知道它很难看。
是否可以使用正则表达式精确搜索未知部分(在这种情况下只有.*
部分),或者我是否需要使用像sed这样的东西?有更好的解决方案吗?
答案 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