Jak usunąć Ctrl-M z plików, w których nie występują dos2unix, perl, tr i sed?


9

Załóżmy, że pracują na bardzo starym serwerze UNIX, gdzie dos2unix, perl, tr, i sednie są obecne. Jak konwertować pliki z formatu dos do formatu unix ?


sed jest dozwolone?
elmarco

@elmarco: no :(
Hemant,

9
Ile lat musi mieć serwer unix, aby go nie mieć tri sed? sedjest stary ........ iirc,
xenoterracide

1
Lepiej exlub edbyć dostępne w systemie takim? Nie nazwałbym tego unix, jeśli nie ma trlub sed.
MattBianco

3
Nie sed? Naprawdę!? Co to za system? Jak zauważają Gilles i MattBianco, prawdopodobnie i tak by miało ed.
Mikel

Odpowiedzi:


12

Myślę, że masz na myśli usunięcie Caret-M na końcu linii. Aby to zrobić, możesz użyć wyszukiwania i zamień w vi.

W vi zwykle robię: (gdzie „^” oznacza CTRL):

:%s/^V^M//g

Który pokazuje się na ekranie jako:

:%s/^M//g

dzięki, że działało :). Myślę, że to bardzo przenośne rozwiązanie.
Hemant,

4
Możesz także użyć sed, aby zrobić to samo bez konieczności vimowania pliku: sed -e '% s / ^ V ^ M // g' nazwa pliku, który również wyświetli się na ekranie jako sed e '% s / ^ M // g 'nazwa pliku Generalnie, jeśli możesz przeszukać / zamienić go w vimie, polecenie jest praktycznie takie samo w sed.
Gabe.

2
@ gabe: rozwiązanie sed jest w rzeczywistości jeszcze bardziej przenośne +1 :)
wzzrd

@wzzrd sedi vioba są określone przez POSIX , a to vipolecenie nie używa żadnych rozszerzeń Vima.
Wildcard

@jjclarkson co oznacza ^V„^ M”?
Cokedude 28.04.16

6

Serwer bez trlub sedmusiałby być naprawdę stary, lub pozbawiony podstawowych poleceń. Mam nadzieję, że edtam jest; istniał w pierwszej edycji Uniksa .

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

gdzie ^V^Moznacza wpisanie Ctrl+ Vnastępnie Ctrl+ M(aby wprowadzić dosłowny znak wiersza). Jeśli wiesz, że wszystkie linie kończą się na CR LF, możesz użyć 1,$s/.$//zamiast tego (bezkrytycznie usuń ostatni znak z każdej linii).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.