Замените \n \r\n в файле Unix

Может проверить Дизъюнктные объединения в F# для большего количества информации о DUs в целом и типе опции (Некоторые, Ни один) в частности. Как в предыдущем ответе говорится, Некоторые - просто случай объединения option< 'a> введите, который является особенно общим/полезным примером алгебраического типа данных.

12
задан Community 23 May 2017 в 11:47
поделиться

5 ответов

  • В чем проблема с загрузкой dos2unix на машину?
  • С какой платформой вы работаете?
  • У вас есть GNU sed или обычный не-GNU sed ?

В Solaris для / usr / bin / sed требуется:

sed 's/$/^M/'

где я ввел '^ M', набрав управление V управление M . '$' Соответствует концу строки и заменяет конец строки на Ctrl-M. Вы также можете использовать скрипт.

Механизмы, ожидающие, что sed расширит ' \ r ' или ' \\ r ' для control-M, будут в лучшем случае зависит от платформы.

11
ответ дан 2 December 2019 в 04:33
поделиться

Столкнувшись с этим, я использую простой однострочник perl :

perl -pi -e 's/\n/\r\n/' filename

, потому что поведение sed меняется, и я знаю, что это работает.

17
ответ дан 2 December 2019 в 04:33
поделиться

Параметр -e не требуется.

$ соответствует символу конечной строки. Эта команда sed вставит символ \ r перед концом строки:

sed 's/$/\r/' myfile 
4
ответ дан 2 December 2019 в 04:33
поделиться

Просто добавив \ r (он же ^ M , см. Ответ Джонатана Леффлера) перед \ n небезопасно, потому что файл может иметь EOL смешанного режима, поэтому вы рискуете получить некоторые строки, начинающиеся с \ r \ r \ n . Безопасно сначала удалить все символы '\ r', а затем вставить (один) \ r перед \ n .

#!/bin/sh
sed 's/^M//g' ${1+"$@"} | sed 's/$/^M/'

Обновлено для использования ^ M .

1
ответ дан 2 December 2019 в 04:33
поделиться

Может быть, если вы попробуете таким образом,

cat myfile | sed 's/\n/\r\n/g' > myfile.win

сработает, насколько я понимаю, вы просто выполняете замену вывода консоли, вам необходимо перенаправить вывод в файл, в этом case myfile.win, тогда вы можете просто переименовать его как хотите. Весь сценарий будет (выполняется в каталоге, полном таких файлов):

#!/bin/bash
for file in $(find . -type f -name '*')
do
  cat $file | sed 's/\n/\r\n/g' > $file.new
  mv -f $file.new $file
done 
-1
ответ дан 2 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

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