我想保留两个字符串之间的字符串。 (“aa”和“cc”)。
问题是如果我有几个“cc”。我想考虑第一个“cc”而不是最后一个“cc”。
我的文件monfic.txt
仅包含此行:
aazzaczzccyyayyaattcttcc
我正在尝试的sed
表达式:
sed 's/.*aa\(.*\)cc.*/\1/' monfic.txt
返回:
zzaczzccyyayyaattctt
而我希望这是输出:
zzaczz
答案 0 :(得分:1)
您可以使用带有Perl扩展名的grep
列出所有匹配项,然后只需在管道中选择您想要的匹配项:
grep -Po 'aa.*?cc' <<< "aazzaczzccyyayyaattcttcc" | sed -n 's/^aa//;s/cc$//;1p'
如果您需要的不是第一个匹配,只需将1p
更改为您想要的任何行或行范围。
例如2p
或2p;5p;
或1,3p;5;
等
答案 1 :(得分:1)
这可能适合你(GNU sed):
sed -r 's/^[^a]*(a[^a]+)*aa([^c]*(c[^c]+)*)cc.*/\2/' file
这匹配在第一个aa
后跟第一个cc
,并在中间提取字符串。