sed не изменяет весь шаблон в ниже кода

Я пробую использование sed сегодня, и у меня есть быстрый вопрос. Почему ниже кода не изменяет весь 'день?

echo 'day night day' | sed 's/day/night/'

Вывод:

ночной ночной день

Но я думал, что это изменит весь "день" s, помогите мне понять, как сделать это и почему это не изменило это.Спасибо

1
задан 14 February 2018 в 02:54

2 ответа

Для создания нескольких замен в одной строке необходимо добавить 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
1
ответ дан 7 December 2019 в 15:24

По умолчанию sed не является "жадным". Если Ваше регулярное выражение будет 's/day/night/g' затем, то Ваш вывод будет "ночной ночной ночью", которая я думаю, что Вы хотите.

0
ответ дан 7 December 2019 в 15:24

Другие вопросы по тегам:

Похожие вопросы: