Używam zarówno Linuksa, jak i FreeBSD (konkretnie używam Debiana Linux i PC-BSD) i znalazłem coś dziwnego sed
.
Często muszę konwertować pliki „wartości rozdzielane tabulatorami” na „wartości rozdzielane przecinkami”. Najprostszym sposobem, jaki znam, jest sed
następujący:
sed 's/\t/,/g' inputFile.txt > outputFile.csv
Działa to doskonale w systemie Linux: zastępuje każdą kartę przecinkiem ... ale w FreeBSD nic nie zastępuje !!!
Czy coś brakuje? Czy istnieje składnia z FreeBSD sed
inna niż ta w Linuksie?
-E
opcja stanowi trick (zarówno na FreeBSD, jak i Mac OS X).Tak, istnieją różne różnice, zachowanie
-i
jest jedynym znanym mi z głowy.Nigdy nie korzystałem z BSD, więc nie mogę naprawdę pomóc w szczegółach, ale
tr
zamiast tego można zastosować obejście :Przyjemny efekt uboczny
tr
powinien być znacznie szybszy. Przetestowałem to na moim systemie Linux, używając pliku testowego z 50000 liniami, z których każda miała 2 zakładki:źródło
tr '\t' ,
jest bardziej przenośny niżtr $'\t' ,
.tr '[\t]' '[,]'
byłby nawet przenośny na niektóre stare systemy SysV.cut
. POSIX spectr
jest tam . Myliłem się co do[
potrzeb dla starego SysV. Jak wskazuje ta specyfikacja POSIX,[
jest ona potrzebna tylko dla tam dostępnych zakresów.Tak, w przeciwieństwie do GNU
sed
FreeBSDsed
nie interpretuje sekwencji specjalnych ANSI C, takich jak\t
wyrażenia regularne.Jednym ze sposobów na uzyskanie najmniej popularnego denomiatora w tym przypadku jest użycie
printf
.Zachowanie
sed -i
edycji plików w miejscu może być kompatybilne, jeśli przełącznik lub opcja bezpośrednio następuje po-i
przełączniku, np.sed -i -e 's/x/X/g' file
Działa zarówno dla GNU,sed
jak i FreeBSDsed
.Najnowsze wersje FreeBSD
sed
(FreeBSD 8.1 lub nowsze) mają-r
przełącznik zwiększający kompatybilność z GNUsed
.(Ponadto użycie klas znaków POSIX w
sed
wyrażeniach regularnych jest dobrym sposobem na zapewnienie zgodności).Alternatywna
sed
implementacja zgodna z POSIX patrz: minised - mniejsza, tańsza, szybsza implementacja SED .źródło
Powinieneś użyć dosłownego TABznaku zamiast
\t
:Zobacz ten komentarz Stephane'a na inne pytanie.
Poniższy artykuł może Cię również zainteresować:
Cytuję odpowiednią część:
źródło
Po zalogowaniu widzę następne ogłoszenie i zapisuję je. Mam nadzieję, że przyda się także innym
źródło
-i
opcja została pokryta już , choć