Поддержка экранирования Unicode \u
и \U
была представлена в Bash 4.2. CentOS 7 имеет Bash 4.2, поэтому он должен работать на этой платформе:
regex=$'.*building[[:space:]]+\u2018(.*)\u2019'
К сожалению, более ранние версии CentOS имели более старые версии Bash, и я считаю, что версия Bash по умолчанию для MacOS по-прежнему 3.2. Для тех, предполагая, что кавычки закодированы как UTF-8, это должно работать:
regex=$'.*building[[:space:]]+\xe2\x80\x98(.*)\xe2\x80\x99'
Если кавычки по-разному кодируются на разных платформах, то вы можете использовать чередование (например, (\xe2\x80\x98|...)
вместо xe2\x80\x98
) для сопоставления всех возможностей (и корректировки индекса, используемого для BASH_REMATCH
).
См. Как отобразить 4-значный символ Unicode в Bash? для получения дополнительной информации о Unicode в Bash.
Я использовал $'...'
для установки регулярного выражения, потому что оно поддерживает \x
и (из Bash 4.2) \u
экранирует символы, а регулярные выражения Bash - нет.
Что касается регулярного выражения: