首页 > 解决方案 > grep -o 在同一行中多次出现变量字符串

问题描述

我在文件中有以下文本行:

(http://onsnetwork.org/kubu4/2018/10/16/qpcr-c-gigas-primer-and-gdna-tests-with-18s-and-ef1-primers/), I checked Ronit's [DNased ctenidia RNA (from 20181016)](http://onsnetwork.org/kubu4/2018/10/16/dnase-treatment-ronits-c-gigas-ploiyddessication-ctenidia-rna/)

我想提取与此模式匹配的每个字符串:

(http://onsnetwork.org/kubu4/.*/)

我尝试了以下命令,但它返回整行,尽管有-o标志:

grep -o "(http://onsnetwork.org/kubu4/.*/)" file.txt

我想要的输出是这样的:

(http://onsnetwork.org/kubu4/2018/10/16/qpcr-c-gigas-primer-and-gdna-tests-with-18s-and-ef1-primers/)
(http://onsnetwork.org/kubu4/2018/10/16/dnase-treatment-ronits-c-gigas-ploiyddessication-ctenidia-rna/)

我将把grep命令应用到一系列文件,这些文件后面会有不同的文本(http://onsnetwork.org/kubu4/,所以命令需要允许这种灵活性。

我只是不确定为什么正则表达式部分grepgrep返回整行而不是每个匹配项。

标签: regexbashgrep

解决方案


您应该检查括号内的网址:

grep -o '(http://onsnetwork.org/kubu4/[^)]*/)' # So, [^)]* and not .*

.*/, grep while extract from(到最后/遇到的。


推荐阅读