-1

我想在其他两个字符串之间保留一个字符串。(“aa”和“cc”)。

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

我的文件monfic.txt只包含这一行:

aazzaczzccyyayyaattcttcc

sed我正在尝试的表达方式:

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

回报:

zzaczzccyyayyaattctt

而我希望这是输出:

zzaczz
4

2 回答 2

1

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

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

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

于 2015-12-06T15:48:48.543 回答
1

这可能对您有用(GNU sed):

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

这匹配第一个,aa然后是第一个cc,并提取中间的字符串。

于 2015-12-06T23:51:49.103 回答