Ответ 1
Решение
Предполагая, что ваш целевой файл $target содержит следующее:
some text mystring some other text
some text mystring a searchstring
just some more text
Эта команда:
sed -i -e '/searchstring/ s/mystring/1/ ; /searchstring/! s/mystring/0/' $target
изменит свой контент на:
some text 0 some other text
some text 1 a searchstring
just some more text
Описание
script содержит две команды подстановки (s), разделенные точкой с запятой.
Подставляемая команда принимает дополнительный диапазон адресов, который выбирает строки, которые должна выполняться подстановкой.
В этом случае адрес regexp использовался для выбора строк, содержащих строку поиска для первой команды; и строки, которые не содержат строку поиска (обратите внимание на восклицательный знак после того, как regexp отрицает совпадение) для второго.
Изменить
Эта команда будет работать лучше и даст тот же результат:
sed -i -e '/searchstring/ s/mystring/1/ ; s/mystring/0/' $target
Дело в том, что команды выполняются последовательно и, таким образом, если в текущей строке по-прежнему есть подстрока мистика после завершения первой команды, то в ней нет уверенной строки поиска.
Престижность пользователя946850.