Jaka jest poprawna składnia do znalezienia podłańcucha (ciąg poprzedzony i poprzedzony określonymi ciągami), który ma , a nie pasować do określonego wzorca?Sed regex i negacja podłańcuchów
Na przykład, chcę wziąć wszystkie podciągi które rozpocząć z BEGIN_
, koniec z _END
i podciąg pomiędzy nimi jest nie równa FOO
; i zamień cały podciąg na format "(wewnętrzny podciąg)". Poniższa pasowałby:
BEGIN_bar_END
->(bar)
BEGIN_buz_END
->(buz)
BEGIN_ihfd8f398IHFf9f39_END
->(ihfd8f398IHFf9f39)
Ale BEGIN_FOO_END
nie będzie pasować.
Grałem około z następujących, ale nie wydaje się znaleźć poprawnej składni:
sed -e 's/BEGIN_(^FOO)_END/($1)/g'
sed -e 's/BEGIN_([^FOO])_END/($1)/g'
sed -e 's/BEGIN_(?!FOO)_END/($1)/g'
sed -e 's/BEGIN_(!FOO)_END/($1)/g'
sed -e 's/BEGIN_(FOO)!_END/($1)/g'
sed -e 's/BEGIN_!(FOO)_END/($1)/g'
Jako notatkę, gdy ma do czynienia z całych linii, można to osiągnąć za pomocą '': http://www.grymoire.com/Unix/Sed.html#uh-32 – Zenexer