在两个其他给定字符串之间提取字符串

时间:2015-12-04 15:58:15

标签: regex sed eshell

我想保留两个字符串之间的字符串。 (“aa”和“cc”)。

问题是如果我有几个“cc”。我想考虑第一个“cc”而不是最后一个“cc”。

我的文件monfic.txt仅包含此行:

aazzaczzccyyayyaattcttcc

我正在尝试的sed表达式:

sed 's/.*aa\(.*\)cc.*/\1/' monfic.txt

返回:

zzaczzccyyayyaattctt

而我希望这是输出:

zzaczz

2 个答案:

答案 0 :(得分:1)

您可以使用带有Perl扩展名的grep列出所有匹配项,然后只需在管道中选择您想要的匹配项:

grep -Po 'aa.*?cc' <<< "aazzaczzccyyayyaattcttcc" | sed -n 's/^aa//;s/cc$//;1p'

如果您需要的不是第一个匹配,只需将1p更改为您想要的任何行或行范围。
例如2p2p;5p;1,3p;5;

答案 1 :(得分:1)

这可能适合你(GNU sed):

sed -r 's/^[^a]*(a[^a]+)*aa([^c]*(c[^c]+)*)cc.*/\2/' file

这匹配在第一个aa后跟第一个cc,并在中间提取字符串。