Як я можу написати цю команду VIM для `sed '?


0

У мене є .csv зі спеціальними символами, які руйнують імпорт, що потрібно зробити.

У VIM я відкрив для видалення спеціальні символи з:

:%s/\r//g

Це видаляє ^M з деяких моїх ламаних ліній.

Але я хотів би або написати це в bash скрипт, або в мій ruby ​​скрипт. Так що мені було цікаво, якщо є спосіб, я можу виконати цей спеціальний пошук символів і замінити в Bash або Ruby.

Шукаючи ^M не працює. А також ви не бачите цього символу в жодному текстовому редакторі, окрім VIM.


Найпростіший спосіб видалити ^M є використання dos2unix. У скрипті потрібно використовувати додатковий робочий файл.
AFH

Ах, чи знаєте ви, який синтаксис використовувати? @AFH
Trip

dos2unix WinFile.txt LinFile.txt. Альтернативно, використовуйте sed -i 's/\r$//' WinFile.txt якщо ви хочете уникнути робочого файлу.
AFH

@AHH Ах, так, sed Команда, безумовно, те, що я шукаю. Але використовуючи -i опція повертає: sed: 1: "/Users/mycomputer/Des ...": invalid command code e Котрий я почув засіб тільки prepending a -e. Так проходить sed -i -e 's/\r$//' ~/Desktop/my_file.csv , але спеціальний символ фактично не видалено. Отже, ніяких змін не відбулося.
Trip

Моя команда вище працює на Ubuntu. Інші розподіли можуть мати різні значення за замовчуванням для sed - За замовчуванням Ubuntu - Основні регулярні вирази, які включають обробку \r і пов'язані з ними послідовності. Тільки проходить думка: ваш файл не тільки для читання?
AFH

Відповіді:


1

Це працює для мене (Fedora 20, GNU sed 4.2.2):

sed -e 's/\r$//' <file-in> > <file-out>

(Замінити <file-in> і <file-out> з іменами файлів.) Я використовую file , щоб перевірити закінчення рядків.


Це працює, я думаю, але він просто виводить текст на мій екран терміналу і не записує його до & lt;
Trip

1
Зверніть увагу на додаткове >; це непрямий . Можна також спробувати sed -e 's/\r$//' yourfile | more або заміщення на місці sed -i -e 's/\r$//' yourfile.
Atafar

Я знаю, що я вже позначив це правильно .. але я тільки що перевірив це, і це, здається, не рухається ^M з файлу ..
Trip

Якщо у вас також є '^ M' в інших місцях, ніж в кінці рядка, використовуйте 'sed -e' s / ^ M // g '...'
Atafar
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.