Как работать только с частью строки

Как заставить sed работать только с определенными частями строки? И, наоборот, как заставить sed не работать с определенными частями строки?

Примеры:

"A a A a ( A a ) A ( a A ) a"

Как, например, заменить все A на T s только между ( и ) , чтобы получить:

"A a A a ( T a ) A ( a T ) a"

И в следующем примере ввода:

"F f F f ( F f ) F ( f F ) f"

Как мне, например , получить:

«X f X f (F f) X (f F) f»

Я искал в Google, но не нашел ничего полезного. Думаю, это общий вопрос о sed. Я надеюсь, что проблема сводится к общим "шаблонам" sed.

  1. имея FROM и TO, затем работают только между ними (во всех случаях в данной строке)
  2. имея FROM и TO работают где угодно, а не между ними ...
  3. особый случай, когда FROM и TO одинаковы (между "и" или "FOO" и "FOO" и т. Д.) как для 1., так и для 2.

Он должен работать с любой операцией, не только с заменой, но и с печатью и т. д., например, печать всего, что находится между строками «FOO» и «BAR» в строке.

"1 2 3 BAR a b c FOO d e f BAR g a h FOO i j k BAR l m n FOO o p q"

Результатом будет

" d e f  i j k "

Итак, общие примеры того, как это сделать, будут очень признательны. Также кажется, что это довольно частый вопрос, но в гугле пока не найдено хороших практических рекомендаций. Я тоже думаю это было бы довольно сложно ответить. Пожалуйста, также не давайте никаких подсказок, как это сделать используя Perl, AWK или что-то еще, кроме sed. Этот вопрос действительно предназначен только для sed.

6
задан Benjamin W. 23 March 2016 в 00:41
поделиться