Игнорирование определенных шаблонов на странице при использовании sed - PullRequest
0 голосов
/ 13 марта 2012

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

        sed -i "0,\/^$a/s//$b/" ./file

Используется для замены слов, например: заменить «лев» на «животное».

I saw the lions at the zoo.

Это изменяется на:

I saw the animals at the zoo.

В документе есть некоторые компоненты, смешанные в тексте, которые я хочу, чтобы sed полностью игнорировал.Они принимают форму \macro{text}, например:

I saw the li\footnote{Hello.}ons at the zoo.

Поскольку область \footnote{Hello.} все еще должна быть изменена на:

I saw the animals at the zoo.

Все они начинаются с \ изаканчивая }, но никогда не используйте более одного } и никаких других \ или }.используются в других местах файла.

  • Как я могу получить sed, чтобы игнорировать их?

1 Ответ

2 голосов
/ 13 марта 2012

Это может работать для вас:

echo "I saw the li\footnote{Hello.}ons at the zoo." | 
sed 'h;s/\\[^}]*}//g;/'"$a"'/!{g;b};s//'"$b"'/g;'
  • Сохраняет текущую строку в области удержания
  • Удаляет вызовы макросов
  • Если $a не существует, он возвращает исходную строку, в противном случае он заменяет $a на $b

N.B. Это предполагает отсутствие строк со смешанными макросами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...