Uruchomiłem seda, aby dokonać podmiany w systemie Windows i zauważyłem, że automatycznie konwertuje on zakończenia linii na Uniksa (\ n). Czy jest opcja, aby powiedzieć sedowi, aby używał zakończeń linii Windows (\ r \ n) lub nawet lepiej, aby zachować końce linii z pliku?
Uwaga: używam seda z unxutils: http://unxutils.sourceforge.net/
LC_ALL=C perl -i -e 'binmode $STDIN;undef $/;$_=<>;s|http://911coned.com|https://911coned.com|gm;print' education.html
git diff
programie.Odpowiedzi:
Możesz użyć
-b
opcji seda, aby traktował plik jako binarny. To rozwiąże problem z sedem cygwina w systemie Windows.Przykład:
sed -b 's/foo/bar/'
Jeśli chcesz dopasować koniec linii, pamiętaj o dopasowaniu, przechwyceniu i skopiowaniu opcjonalnego powrotu karetki.
Przykład:
sed -b 's/foo\(\r\?\)$/bar\1/'
Ze strony podręcznika seda :
źródło
sed -i
cygwin (dla mnie), ale możesz to obejść. Dzięki za aktualizację - pozostałe odpowiedzi były przez chwilę ostatnim słowem na ten temat.sed -i
: ważne jest tylko, jak to wpisać. Choćsed -bi
ised -i -b
pracy,sed -ib
czy nie pracy: patrz strony man dlaczego (używab
jako przyrostek dla kopii zapasowej).sed -bi 's/foo/bar/'
Możesz spróbować dodać
\n
for\r\n
na końcu istniejącego skryptu w następujący sposób:a może
Jeśli żadna z powyższych dwóch nie zadziała, będziesz musiał zajrzeć do konkretnej strony podręcznika dla twojej wersji,
sed
aby sprawdzić, czy taka opcja istnieje. Należy pamiętać, że * nix wersje osed
nie nie zmieniają terminatory linii bez słów, aby to zrobić.Inną alternatywą jest użycie
cygwin
wersji,sed
która nie powinna mieć tego niepożądanego zachowania.źródło
0x0A
), jak i \ r \ n (0x0D 0x0A
) - to proponowane rozwiązanie (zawsze ponowne wstrzykiwanie \ r) przerywa go.Alternatywnie (wersja cygwin)
perl -pe
nie wydaje się mieć tego problemu.źródło
sed -i -e 's/<img[^>]*\/>//g' *.xml
zamienia zakończenia linii na „\ n”perl -i -p -e 's/<img[^>]*\/>//g' *.xml
zachowuje oryginalne zakończenia liniiGnuwin można powstrzymać, aby zepsuć znaki nowej linii (win-> unix), jeśli podasz tylko przełącznik -b i przekierowanie. Użycie przełącznika -i (inline) zepsuje to.
Np. Sed.exe -b "s / \ xFF \ xFE //" c: \ temp \ in.csv> c: \ temp \ out.csv
źródło
-i
trybem pracy w mojej odpowiedzi .Odkryłem, że
sed-4.4.exe
z https://github.com/mbuilov/sed-windows jest czysta wygrana-b
trybie-i
trybie w miejscu-z
tryb z\0
delimeters zamiast\n
które mogą być przydatne czasami zbytZobacz także listę opcji seda i listę wszystkich portów sed w systemie Windows .
Zauważ, że GnuWin32 sed 4.2.1 robi uszkodzonych zakończeń linii w
-bi
trybie i nie ma-z
trybu wcale.źródło