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.


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

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.

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\)")

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.


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'

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


0

$ recode dos .. PLIK
$ flip -u PLIK

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.