Оновлення : Починаючи з 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.