Я запускаю sed, чтобы сделать некоторую замену в окнах, и заметил, что он автоматически преобразует окончания строк в Unix (\ n). Есть ли возможность указать sed использовать окончания строк Windows (\ r \ n) или даже лучше сохранить окончания строк из файла?
Примечание: я использую sed из unxutils: http://unxutils.sourceforge.net/
LC_ALL=C perl -i -e 'binmode $STDIN;undef $/;$_=<>;s|http://911coned.com|https://911coned.com|gm;print' education.html
git diff
программе.Ответы:
Вы можете использовать
-b
параметр sed, чтобы он обрабатывал файл как двоичный. Это решит проблему с sed cygwin в Windows.Пример:
sed -b 's/foo/bar/'
Если вы хотите сопоставить конец строки, не забудьте сопоставить, зафиксировать и скопировать дополнительный возврат каретки.
Пример:
sed -b 's/foo\(\r\?\)$/bar\1/'
На странице руководства по sed :
источник
sed -i
cygwin (для меня), но вы можете обойти это. Спасибо за обновление - другие ответы какое-то время были последним словом на эту тему.sed -i
: просто важно, как это набрать. Хотяsed -bi
иsed -i -b
работа,sed -ib
делает не работу: см страницу человека, почему (использует вb
качестве суффикса для резервной копии).sed -bi 's/foo/bar/'
Вы можете попробовать добавить
\n
for\r\n
в конце вашего существующего скрипта, например:или возможно
Если ни один из вышеперечисленных двух не работает, вам нужно будет проконсультироваться со специальной страницей руководства для вашей версии,
sed
чтобы узнать, существует ли такая опция. Обратите внимание , что * NIX версии изsed
этого не изменить терминаторы линии без слов , чтобы сделать это.Другой альтернативой является использование
cygwin
версии, вsed
которой не должно быть такого нежелательного поведения.источник
0x0A
), так и \ r \ n (0x0D 0x0A
) - это предлагаемое решение (всегда повторно вводить \ r) нарушает его.В качестве альтернативы (версия cygwin)
perl -pe
, похоже, не имеет этой проблемы.источник
sed -i -e 's/<img[^>]*\/>//g' *.xml
заменяет окончания строк на '\ n',perl -i -p -e 's/<img[^>]*\/>//g' *.xml
сохраняет исходные окончания строкGnuwin может быть подавлен, чтобы испортить новые строки (win-> unix), если вы укажете только переключатель -b и перенаправить. Использование переключателя -i (inline) может испортить его.
Например, sed.exe -b "s / \ xFF \ xFE //" c: \ temp \ in.csv> c: \ temp \ out.csv
источник
-i
режимом смотрите в моем ответе .Я обнаружил , что
sed-4.4.exe
из https://github.com/mbuilov/sed-windows чистая победа в ней-b
режиме-i
режимом на месте-z
режим с\0
разделителями, вместо\n
которых иногда тоже может быть удобноСм. Также список параметров sed и список всех портов sed для Windows .
Обратите внимание , что gnuwin32 СЭД 4.2.1 делает коррумпированные окончаний строк в
-bi
режиме и не имеет-z
режима на всех.источник