Jak usunąć znak ^M (enter) występujący w środku linii z pliku tekstowego

Osoby pracujące z eksportami danych pochodzących z różnego rodzaju baz nie raz z pewnością natrafiły na problem
nieprawidłowych znaków występujących w wynikowych plikach. Jedną z takich nieprawidłowości jest znak ENTER występujący wewnątrz ciągu oznaczony jako ^M. W przypadku niewielkiej ilości takich znaków można je poprawić ręcznie, korzystając np. z edytora vi. Jeżeli jednak tych rekordów jest dużo więcej możemy skorzystać z programu sed.

Dla przykładu wykorzystamy plik: enter.txt

Poleceniem cat -v enter.txt lub korzystając np. z edytora vi możemy zobaczyć jego zawartość, która jest następująca:

1|OK|2023-07-14|TESTOWE POLE 1||21:23:42|H|
2|OK|2023-07-14|TESTOWE POLE 2^M||21:23:42|H|
3|OK|2023-07-14|TESTOWE POLE 3^M||21:23:42|H|
4|OK|2023-07-14|TESTOWE POLE 4||21:23:42|H|
5|OK|2023-07-14|TESTOWE POLE 5^M||21:23:42|H|
6|OK|2023-07-14|TESTOWE POLE 6||21:23:42|H|
7|OK|2023-07-14|TESTOWE POLE 7||21:23:42|H|

W liniach 2, 3, oraz 5 zobaczyć możecie błędny znak ^M.

Poprawmy zatem teraz nasz plik usuwając błędnie występujące znaki ^M korzystając z programu sed.

sed 's/\r//' enter.txt

Na ekranie wyświetlona zostanie zawartość pliku bez ^M:

1|OK|2023-07-14|TESTOWE POLE 1||21:23:42|H|
2|OK|2023-07-14|TESTOWE POLE 2||21:23:42|H|
3|OK|2023-07-14|TESTOWE POLE 3||21:23:42|H|
4|OK|2023-07-14|TESTOWE POLE 4||21:23:42|H|
5|OK|2023-07-14|TESTOWE POLE 5||21:23:42|H|
6|OK|2023-07-14|TESTOWE POLE 6||21:23:42|H|
7|OK|2023-07-14|TESTOWE POLE 7||21:23:42|H|

Pozostaje nam już tylko przekierować zawartość do nowego, poprawnego już pliku:

sed 's/\r//' enter.txt > poprawny.txt