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

と の前にあるMANGOとの間の番号を取得する必要があります( この場合は)。大文字の単語の間のテキストは何でもかまいません。私はこれを試しました:CHERRYAPPLEWHITE444

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

しかし、それは返します:

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

これが問題をより良い方法で示していることを願っています

4

2 に答える 2

1

MANGOBLACKまたはの間の小数のグループをキャッチする必要がある場合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 が行内で 1 回だけ発生する場合にのみ機能します。

-nオプションとpフラグを指定しないsedと、一致するものが見つからない場合に単純に行が出力されます。

于 2012-10-14T19:59:29.447 に答える