0

我有一个包含文本和数字的文本文件,例如:

MANGO444CHERRYa.b /c-1@2#3APPLEa>b;c. a1$2$3WHITE12 3ab cWHITE5%6^7a=b +cWHITEaba5b6a7baMANGO555CHERRY 1'2'3a,b,c!APPPLE1`2~3ab @cYELLOW123---a- -bcYELLOW

我需要在MANGOandCHERRY之前得到他APPLE的号码WHITE (在这种情况下,444)。大写单词之间的文本可以是任何内容。我试过这个:

(?<=MANGO)\d+((=?.*?APPLE)(=?.*?WHITE))  

但它返回:

444CHERRYa.b /c-1@2#3APPLEB>b;c. a1$2$3WHITE

我希望这能以更好的方式说明问题

4

2 回答 2

1

如果您需要捕获MANGOand BLACKor之间的小数组APPLE

etuardu@subranu:~$ echo '
> MANGO0012BLACK
> MANGO0045txt
> MANGO2314APPLE
> txt00313BLACK' | grep -Po '(?<=MANGO)\d+(?=BLACK|APPLE)'
0012
2314
于 2012-10-14T15:47:14.787 回答
1

这可能会奏效。我正在使用 sed。

sed -nr 's/.*MANGO([0-9]+).*APPLE.*WHITE.*/\1/p' yourfile

编辑以检查 MANGO 和 WHITE 之间的 APPLE。

限制:仅当 MANGO-APPLE-WHITE 在该行中仅出现一次时才有效。

如果没有-n选项和p标志,sed将在找不到匹配项时简单地打印出该行。

于 2012-10-14T19:59:29.447 回答