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


9

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


Сед разрешен?
Эльмарко

@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

спасибо, что сработало :). Я думаю, что это очень портативное решение.
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/.$//вместо этого (без разбора удалить последний символ в каждой строке).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.