Оновлення : Починаючи з MacOS Big Sur (11,0) , в sedданий час робить підтримку Iпрапора для регістронезавісімого узгодження , так що команда в цьому питанні повинна працювати (BSD sedне повідомляє про свою версію, але ви можете піти за датою в нижній частині на manсторінці, яка повинна бути March 27, 2017або більш пізньої); простий приклад:
$ sed 's/ö/@/I' <<<'FÖO'
F@O
Примітка: I(верхній регістр) - це задокументована форма прапора, алеi працює.
Крім того , починаючи з MacOS Big Sur (11,0) в awkданий час є локалі відомо ( awk --versionслід повідомляти 20200816або більш пізні):
$ awk 'tolower($0)' <<<'FÖO'
föo
Наступне стосується macOS аж до Каталіни (10.15) :
Щоб бути зрозумілим: на macOS sed- який є реалізацією BSD - НЕ підтримує співставлення без урахування регістру - важко повірити, але правда. Раніше прийняв відповідь , який сам по собі показує GNU sed команду, отримав цей статус через perl-О рішенням , зазначеним в коментарях.
Щоб змусити це рішення Perl працювати і з іноземними символами , через UTF-8, використовуйте щось на зразок:
perl -C -Mutf8 -pe 's/öœ/oo/i' <<< "FÖŒ" # -> "Foo"
-C вмикає підтримку UTF-8 для потоків та файлів, припускаючи, що поточна локаль заснована на UTF-8.
-Mutf8говорить Perl інтерпретувати вихідний код як UTF-8 (у цьому випадку рядок передається -pe) - це коротший еквівалент більш багатослівного -e 'use utf8;'.Спасибі, Марк Рід
(Зверніть увагу, що використання awkтакож не є опцією , оскільки awkна macOS (тобто, BWK awk та BSD awk ), здається, зовсім не обізнані про локалі - його tolower()та toupper()функції ігнорують сторонні символи (та sub()/ gsub()не мають прапорів чутливості до регістру для початку) з).)
Примітка про взаємозв'язок sedі awkстандарт POSIX:
BSD sedта awkобмежують їх функціональність здебільшого тим, що передбачено специфікаціями POSIXsed та
POSIXawk , тоді як їх аналоги GNU реалізують набагато більше розширень.
I- це розширення GNU, яке може бути недоступним у вашій копії sed.