grep -o同一行中多次出现可变字符串

时间:2018-11-08 17:43:45

标签: regex bash grep

我在文件中包含以下文本行:

(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/之后将具有不同的文本,因此该命令需要具有这种灵活性。

我不确定grep的正则表达式部分为何导致grep返回整行,而不是每次匹配都返回。

1 个答案:

答案 0 :(得分:1)

您应检查内部括号中的网址:

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

使用.*/时,grep从(提取到遇到的最后一个/