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.
dos2unixjest taki program dla systemu Unix / Linux, który robi to, co chcesz.
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.
dos2unixjest taki program dla systemu Unix / Linux, który robi to, co chcesz.
Odpowiedzi:
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.
\r. Są jednak bardzo rzadkie.
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.
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'
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
Tak, użyj dos2unix. Na przykład:
[justin@mybox ~]$ dos2unix myfile
dos2unixjest zwykle dostępny, w przeciwnym raziesed -e 's/\r$//'