Usuwanie nowych linii Windows w Linuksie (sed vs. awk)
Mieć rozdzielone pliki z nieprawidłowo umieszczonymi znakami nowej linii w środku pól (nie kończąc linii), pojawiając się jako ^ M w Vimie. Pochodzą z eksportu freebcp (na Centos 6) bazy danych MSSQL. Zrzucanie danych w hex pokazuje r wzorce:
$ xxd test.txt | grep 0d0a
0000190: 3932 3139 322d 3239 3836 0d0a 0d0a 7c43
Mogę je usunąć za pomocą awk, ale nie mogę zrobić tego samego z sed.
Działa to w awk, całkowite usunięcie przerw w linii:
awk 'gsub(/\r/,""){printf $0;next}{print}'
Ale w sed nie ma, pozostawiając feedy liniowe na miejscu:
sed -i 's/\r//g'
gdzie wydaje się, że nie ma to wpływu:
sed -i 's/\r\n//g'
Używanie ^ M w wyrażeniu sed (ctrl + v, ctrl + m) również nie działa.
W przypadku tego rodzaju zadania sed jest łatwiejszy w groku, ale pracuję nad tym, aby dowiedzieć się więcej o obu. Czy używam sed nieprawidłowo lub czy istnieje ograniczenie?