Як видалити Ctrl-M з файлів, де dos2unix, perl, tr та sed немає?


9

Припустимо , ви працюєте на дуже старому сервері UNIX , де dos2unix, perl, trі sedнемає. Як можна конвертувати файли з dos в формат Unix ?


sed дозволено?
elmarco

@elmarco: ні :(
Hemant

9
Скільки років має бути сервером Unix, щоб його не було trі sed? sedє старий ........ iirc,
ксенотерракід

1
Буде exабо edдоступний у такій системі? Я б не назвав це unix, якщо немає trабо sed.
MattBianco

3
Ні sed? Дійсно !? Нецікаво, що таке система? Як зазначають Жилль і МетБянко, це, мабуть, все одно було edб принаймні.
Мікель

Відповіді:


12

Я думаю, ви маєте на увазі видалення каретки-М у кінці рядків. Для цього можна використовувати пошук і заміну в vi.

У vi я зазвичай роблю: (де "^" являє собою CTRL):

:%s/^V^M//g

Що відображається на екрані як:

:%s/^M//g

дякую, що працювали :). Я думаю, що це дуже портативне рішення.
Хемант

4
Ви також можете використовувати sed, щоб зробити те саме, що не потрібно переглядати файл: sed -e '% s / ^ V ^ M // g' ім'я файлу, яке також відображатиметься на екрані як sed e '% s / ^ M // g 'ім'я файлу Загалом, якщо ви можете шукати / замінювати його на vim, команда практично однакова в sed.
габе.

2
@gabe: рішення sed є насправді ще більш портативним +1 :)
wzzrd,

@wzzrd sedі viобидва вказані POSIX , і ця viкоманда не використовує ніяких розширень Vim.
Wildcard

@jjclarkson що означає ^Vі '^ M'?
кокеду

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.