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