Portál AbcLinuxu, 10. května 2025 09:11
1. [ROOT] 2. [A] 3. nieco 4. [/A] 5. [A] 6. aaa 7. [/A] 8. [A] 9. nieco 10. [/A] 11. [B] 12. [C] 13. nieco 14. [/C] 15. [/B] 16. [A] 17. aaa 18. [/A] 19. [A] 20. nieco 21. [/A] 22. [/ROOT]Chcem vyhľadať LEN tie časti/elementy "[A]..[/A]", ktoré v sebe (kdekoľvek, aj vo vnorenej časti/elemente) obsahujú text "aaa". Skúšal som nasledovné:
(?s)\[A\].*?aaa.*?\[\/A\]
ale nefunguje správne. Prvý match je od 2. po 7. riadok a druhý match je od 8. po 18. riadok. Čiže match obsahuje aj časti, ktoré nechcem...
Čo vlastne potrebujem: Nájsť element [A], za ním (v ňom) hľadať text "aaa", ale hľadať ho iba dovtedy, kým nenarazím na koniec tohto elementu [/A].
PS: Uvažujme, že v elemente A nemôže byť vnorený ďalší element A (ale iné môžu).
Za radu vopred ďakujem.
aaa
nemohla obsahovat [A]
. Zkusil bych
(?s)\[A\](?!\[A\])*?aaa(?!\[A\])*?\[\/A\]
(?s)\[A\](?!\[A\]).*?aaa(?!\[A\]).*?\[\/A\]
(bodky pred *), ale bez úspechu.
eclipse
to funguje):
(?s)\[A\]([^\[]|\[(?!A))*?aaa.*?\[/A\]
Tohle řešení by bylo přípustné (předpokládá uvedené formátování)?
sed -n '/\[A\]/,/\[\/A\]/p' | \ sed -n ':a;s#\[\/A\]#[/A]#;t b;N;b a;:b;/aaa/p'
PS: Možná by to šlo udělat na jeden průchod (bez roury).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.