SED поиск и замена более 1 шаблона, если совпадает линия - PullRequest
0 голосов
/ 29 мая 2019

Как найти и заменить несколько шаблонов для соответствующего раздела в файле? Я попробовал это

sed '/pattern1,pattern2/s/string1/replace1/g;s/string2/replace2/g' file

Но он будет игнорировать раздел pattern1, pattern2 и выполнять поиск и замену всего файла для моего второго поиска и замены.

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

sed для s / old / new для отдельных строк, вот и все.Предполагая, основываясь на окружающем описании, что под /pattern1,pattern2/ вы на самом деле подразумевали /pattern1/,/pattern2/, то с любым awk в любой оболочке на любой машине UNIX:

awk '
/pattern1/ { f=1 }
f {
    gsub(/string1/,"replace1")
    gsub(/string2/,"replace2")
}
/pattern2/ { f=0 }
1' file
0 голосов
/ 29 мая 2019

Curlies.

Для записи, это для GNU sed , который вы используете.Для других версий / переносимости замените точки с запятой символами новой строки.

Также /pattern1,pattern2/ ищет буквально "pattern1, pattern2" только как одну строку.

Если я правильно прочитал, выхотите сделать некоторые замены в строках, которые имеют pattern1 и pattern2, хотя не обязательно в любом относительном размещении.В этом случае:

sed '
  /pattern1/ { 
    /pattern2/ { 
      s/string1/replace1/g;
      s/string2/replace2/g;
    }
  }
' file

Я разложил его для удобства чтения, но вы могли бы разбить все обратно в одну строку, если бы вы действительно этого хотели.

Если вы знаете pattern1 всегда перед pattern2, тогда вы можете использовать

sed '/pattern1.*pattern2/ { 
  s/string1/replace1/g; s/string2/replace2/g;
}' file

Но если они могут быть в обратном порядке, используйте первые sed.

Также ... возможномы могли бы получить образец файла для проверки?Они просто напечатаны на манжете, но если бы вы предоставили пример данных, я бы на самом деле использовал их для проверки их перед отправкой чего-то, что могло бы иметь опечатку или логическую ошибку.Просто предложение.Люди с большей вероятностью будут внимательны, если вы не заставите их собрать все кусочки, смеется

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