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