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