Я пробую использование sed сегодня, и у меня есть быстрый вопрос. Почему ниже кода не изменяет весь 'день?
echo 'day night day' | sed 's/day/night/'
Вывод:
ночной ночной день
Но я думал, что это изменит весь "день" s, помогите мне понять, как сделать это и почему это не изменило это.Спасибо
Для создания нескольких замен в одной строке необходимо добавить g
(глобальный) флаг:
$ echo 'day night day' | sed 's/day/night/g'
night night night
Можно также использовать число вместо g
заменять только экземпляр нумерующий:
$ echo 'day night day night day' | sed 's/day/night/2'
day night night night day
Как отмечено в GNU sed документация:
Примечание: стандарт POSIX не указывает то, что должно произойти, когда Вы смешиваете g и модификаторы числа, и в настоящее время существует не широко согласовано значение через sed реализации. Для GNU sed, взаимодействие определяется, чтобы быть: проигнорируйте соответствия перед нумерующего, и затем соответствуйте и замените все соответствия от нумерующий на.
Так как Ubuntu использует GNU sed, который является действительно, как это ведет себя:
$ echo 'day night day night day' | sed 's/day/night/2g'
day night night night night
По умолчанию sed не является "жадным". Если Ваше регулярное выражение будет 's/day/night/g' затем, то Ваш вывод будет "ночной ночной ночью", которая я думаю, что Вы хотите.