Czy istnieje polecenie Bash do konwersji \ r \ n na \ n?

19

Czy istnieje polecenie Bash do konwersji \ r \ n na \ n?

Kiedy przesyłam skrypty z systemu Windows do systemu Linux, potrzebuję takiego narzędzia, aby wszystko działało.

użytkownik25321
źródło
7
dos2unixjest zwykle dostępny, w przeciwnym raziesed -e 's/\r$//'
falstro
1
Nie, nie ma do tego polecenia Bash, ale dos2unixjest taki program dla systemu Unix / Linux, który robi to, co chcesz.
Wstrzymano do odwołania.
1
Dlaczego po prostu nie używasz rozsądnego edytora tekstu, który pozwala wybrać styl nowej linii podczas zapisywania plików?
vtest,

Odpowiedzi:

28

Jest:

dos2unix
RaYell
źródło
To historycznie poprawna odpowiedź, chociaż dos2unix nie zawsze jest obecnie dostępny.
Jared
5

Tłumacz ( tr ) jest dostępny we wszystkich Uniksach:

tr -d '\r'  # From \r\n line end (DOS/Windows), the \r will be removed so \n line end (Unix) remains.
Peter Mortensen
źródło
1
Ma również efekt uboczny usuwania innych \r. Są jednak bardzo rzadkie.
ivan_pozdeev
5

Z sed i znajdź ten koniec z .txt, .php, .js, .css:

 sed -rie 's/\r\n/\n/' \
 $(find . -type f -iregex ".*\.\(txt\|php\|js\|css\)")
fitorec
źródło
5

Istnieje narzędzie uniksowe o nazwie, convktóre może konwertować zakończenia linii. Często jest wywoływany za pomocą softlinków do u2dlub d2ulub unix2doslub dos2unix.

Dodatkowo istnieją narzędzia zwane fromdosi todos.

Steven Penny
źródło
2

Za pomocą man 1 ed (który edytuje pliki w miejscu bez wcześniejszej kopii zapasowej - w przeciwieństwie do: sed .. -i ".bak" ...):

ed -s file <<< $'H\ng/\r*$/s///\nwq'

źródło
Nawet nie wiedziałem, ale to robi robotę (stara, ale złota)
dwana
To polecenie działało dla mnie, gdy polecenia z innych odpowiedzi nie istniały na współdzielonym hostingu, którego używam. Dzięki :)
FKasa,
2

Robienie tego z POSIX jest trudne:

  • POSIX Sed nie obsługuje \rlub \15. Nawet jeśli tak, opcja na miejscu -inie jest POSIX

  • POSIX awk robi wsparcie \ri \15, jednak -i inplaceopcja ta nie jest POSIX

  • d2u i dos2unix nie są narzędziami POSIX , ale ex jest

  • POSIX ex nie obsługuje \r, \15, \nlub\12

Aby usunąć zwroty karetki:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\r","");print>ARGV[1]}' file

Aby dodać zwrot karetki:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\n","\r&");print>ARGV[1]}' file
Steven Penny
źródło
0

Tak, użyj dos2unix. Na przykład:

[justin@mybox ~]$ dos2unix myfile
Justin Ethier
źródło
0

$ recode dos .. PLIK
$ flip -u PLIK

(Każdy istnieje również dla systemów innych niż Ubuntu, ale te linki są przydatne.)


źródło