Aktualizacja : Począwszy MacOS Big Sur (11,0) , sed
teraz nie obsługuje I
flagę na wielkość liter , więc komenda w pytaniu powinny teraz działać (BSD sed
nie zgłasza swój wersji, ale można przejść przez dzień na dole od man
strony, która powinna być March 27, 2017
lub nowszym); prosty przykład:
$ sed 's/ö/@/I' <<<'FÖO'
F@O
Uwaga: I
(wielkie litery) to udokumentowana forma flagi, ale i
działa również.
Podobnie, począwszy od systemu macOS Big Sur (11.0) jestawk
teraz uwzględniany język ( awk --version
powinien zgłosić 20200816
lub nowszy):
$ awk 'tolower($0)' <<<'FÖO'
föo
Poniższe informacje dotyczą macOS do Catalina (10.15) :
Dla jasności: w systemie macOS sed
- który jest implementacją BSD - NIE obsługuje dopasowywania bez uwzględniania wielkości liter - trudno w to uwierzyć, ale prawda. Wcześniej zaakceptowane odpowiedź , która sama pokazuje GNU sed
polecenia, zyskał ten status z powodu perl
opartym roztworu wzmiankowanym w komentarzach.
Aby to rozwiązanie Perla działało również z obcymi znakami , za pośrednictwem UTF-8, użyj czegoś takiego:
perl -C -Mutf8 -pe 's/öœ/oo/i' <<< "FÖŒ" # -> "Foo"
-C
włącza obsługę UTF-8 dla strumieni i plików, zakładając, że bieżące ustawienia regionalne są oparte na UTF-8.
-Mutf8
mówi Perlowi, aby zinterpretował kod źródłowy jako UTF-8 (w tym przypadku ciąg przekazany do -pe
) - jest to krótszy odpowiednik bardziej szczegółowego -e 'use utf8;'.
Dziękuję, Mark Reed
(Zauważ, że używanie również awk
nie jest opcją , ponieważ awk
w macOS (tj. BWK awk i BSD awk ) wydaje się być całkowicie nieświadome ustawień narodowych - jego tolower()
i toupper()
funkcje ignorują obce znaki (i sub()
/ gsub()
nie mają na początku flag niewrażliwych na wielkość liter z).)
Uwaga na temat relacji sed
i awk
do standardu POSIX:
BSD sed
i awk
ograniczają ich funkcjonalność głównie do tego, co nakazują specyfikacje POSIXsed
i
POSIXawk
, podczas gdy ich odpowiedniki w GNU implementują znacznie więcej rozszerzeń.
I
jest rozszerzeniem GNU, które może nie być dostępne z twoją kopią seda.