Я застрял в том числе регулярных выражений с помощью команды sed.
Q: Я хочу заменить все вхождения двух пробелов после конца предложения только одним пробелом.
Вот что я сделал:
sed 's/^ $/^$/' file
И он не заменил два пробела одним пробелом после окончания предложения.
Вывод получаю:
This is the output. Hello Hello
Вывод хочу
This is the output. Hello Hello
text-processing
sed
Зевс
источник
источник
Ответы:
замените точку, за которой следуют два или более пробелов, за точкой, за которой следует один пробел.
источник
sed -r 's/\.\s+/. /g' file
с GNU sed ...sed -E
а неsed -r
. Это работает с GNU sed и * BSD sed (включая Mac OS X) и некоторыми другими. Это запланировано для включения в качестве стандарта в POSIX "очень скоро сейчас".sed -E
кому-то на этом сайте, который не работал, ноsed -r
работал .. Я работал только с GNU sed, так что понятия не имею о POSIX и других вариациях .. Попробую включить эту деталь в будущем Спасибо :)-E
течение достаточно долгого времени (по крайней мере, с 2011 года, но страницы о-r
Ваша
sed
команда's/^ $/^$/'
не будет делать то, что вы хотите. Он просто заменяет все строки содержит один пробел на строку содержать^$
.В зависимости от того, какие символы обозначают конец предложения, вы можете сделать:
Это будет заменить 2 или более пробелов после
.
,?
или!
только с одним пробелом.источник
sed -r 's/([.?!])\s+/\1 /g' file
sed
сценарий редактирования заменит любую строку, содержащую один пробел, литеральной строкой^$
.Это то, что вы можете искать,
Образец,
Используя
sed
,источник