Как удалить Ctrl-M из файлов, в которых отсутствуют dos2unix, perl, tr и sed?

9

Предположим , вы работаете на очень старом сервере UNIX , где dos2unix, perl, trи sedнет. Как вы можете конвертировать файлы из DOS в Unix формат?

Hemant
источник
Сед разрешен?
Эльмарко
@elmarco: нет :(
Hemant
9
Сколько лет должен быть сервер Unix, чтобы не иметь trи sed? sedстар ........ iirc,
ксенотеррацид
1
Будет exили edбудет доступен в такой системе? Я бы не назвал это Unix, если нет trили sed.
MattBianco
3
Нет sed? В самом деле!? Из интереса, что это за система? Как указывают Жиль и МаттБьянко, это, вероятно, все еще будет, edпо крайней мере.
Микель

Ответы:

12

Я думаю, что вы имеете в виду удаление каретки-M в конце строки. Вы можете использовать поиск и замену в vi, чтобы сделать это.

В vi я обычно делаю: (где «^» представляет CTRL):

:%s/^V^M//g

Который показывает на экране как:

:%s/^M//g
jjclarkson
источник
спасибо, что сработало :). Я думаю, что это очень портативное решение.
Hemant
4
Вы также можете использовать sed, чтобы сделать то же самое без необходимости vim файла: sed -e '% s / ^ V ^ M // g' filename Это также будет отображаться на экране как sed e '% s / ^ M // g 'filename В общем, если вы можете искать / заменять его в vim, команда практически такая же, как и в sed.
таращиться
2
@gabe: решение sed на самом деле еще более портативно +1 :)
wzzrd
@wzzrd, sedи viоба определяются POSIX , и что viкоманда не использует какие - либо расширений Vim.
Wildcard
@jjclarkson, что означает ^Vи '^ M'?
cokedude
6

Сервер без trили sedдолжен быть очень старым или отсутствовать некоторые основные команды. Надеюсь ed, там есть; он существовал в первом издании Unix .

ed /path/to/file
1,$s/^V^M$//
w
q

где ^V^Mозначает набирать Ctrl+ Vзатем Ctrl+ M(чтобы ввести буквальный перевод строки). Если вы знаете, что все строки заканчиваются на CR LF, вы можете использовать 1,$s/.$//вместо этого (без разбора удалить последний символ в каждой строке).

Жиль "ТАК - перестань быть злым"
источник