Регулярное выражение Sed и отрицание подстроки

Каков правильный синтаксис для поиска подстроки (строки, которой предшествуют определенные строки и за которой следуют определенные строки), которая не соответствует определенному шаблону?

Например, я хочу взять все подстроки, которые начинаются с BEGIN_, заканчиваются с _END, а подстрока между ними не равно FOO; и замените всю подстроку форматом "(внутренняя подстрока)". Следующее будет соответствовать:

  • BEGIN_bar_END -> (bar)
  • BEGIN_buz_END -> (buz)
  • BEGIN_ihfd8f398IHFf9f39_END -> (ihfd)

Но BEGIN_FOO_END не соответствует.

Я поиграл со следующим, но не могу найти правильный синтаксис:

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'
24
задан Anthony 29 January 2012 в 12:17
поделиться