我有一个包含文字和数字的文字文件,例如:
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
我需要在MANGO
和CHERRY
和APPLE
之前的WHITE
和444
之间得到号码(在这种情况下,(?<=MANGO)\d+((=?.*?APPLE)(=?.*?WHITE))
)。大写单词之间的文本可以是任何内容。我试过这个:
444CHERRYa.b /c-1@2#3APPLEB>b;c. a1$2$3WHITE
但它返回:
{{1}}
我希望这能以更好的方式证明这个问题
答案 0 :(得分:1)
这可能有用。我虽然使用sed。
sed -nr 's/.*MANGO([0-9]+).*APPLE.*WHITE.*/\1/p' yourfile
编辑以检查MANGO和WHITE之间的APPLE。
限制:仅当MANGO-APPLE-WHITE在线内出现一次时才有效。
如果没有-n
选项和p
标记,sed
只会在找不到匹配项时打印出该行。
答案 1 :(得分:0)
如果您需要在MANGO
和BLACK
或APPLE
之间捕获小数组:
etuardu@subranu:~$ echo '
> MANGO0012BLACK
> MANGO0045txt
> MANGO2314APPLE
> txt00313BLACK' | grep -Po '(?<=MANGO)\d+(?=BLACK|APPLE)'
0012
2314