регулярное выражение для замены слова в блоке в файле?

Если у меня есть:

 words allow bus  

Существует ли регулярное выражение, которое может заменить allow на что-то другое, оставив другие слова и блок нетронутыми?

Так должно выглядеть так:

  words not bus  

или же

  words bus  

потому что я заменю слово чем-то другим или уберу это. Я попробовал регулярное выражение, как это:

 ((\s|\w|\n)+)allow((\s|\n|\w)+) 

и замените его на \1\n not \2 , но он заменяет allow и удаляет вторую половину блока, который мне не нужен.

Так есть ли регулярное выражение, которое может заменить слово в блоке и сохранить блок без изменений?

Я не до конца понимаю вашу конкретную проблему, простой sed может добиться того, что вы показываете:

 $ sed 's/\ballow\b/not/g' afile  words not bus 

\b защищает, поэтому мы заменяем только слова, такие как allow , строкой not . Если вы хотите удалить строки, содержащие строку, вы можете использовать sed для этого:

 $ sed '/\ballow\b/d' afile  words bus