Відповіді:
Дійсно, це посібник з bash, але це допомагає знати, що ви шукаєте, що не корисно, якщо ви не знаєте, що шукаєте. Якщо ви шукали, [[вас відволікає розділ [[ expression ]]умовного вираження. Крім того, шукайте :space:землю на двох прикладах у тому ж розділі. Ви можете дотримуватися сухар у цьому прикладі:
Наприклад, наступне буде відповідати рядку (зберігається в рядку змінної оболонки), якщо є послідовність символів у значенні, що складається з будь-якого числа, включаючи нуль, символів пробілу, нуля або одного екземпляра 'a', то a 'b':
[[ $line =~ [[:space:]]*?(a)b ]]
... з чого ви могли скласти разом, що [[:space:]]частина відповідає "космічним персонажам", але ви можете пробачити, подумавши, що це лише буквальний простірний персонаж, а не цілий клас персонажів, який він представляє.
Якщо ви (трапляєтесь?) Шукаєте рядок " space"(тобто пробіл, за яким слідує слово "пробіл"), в Інтернетному посібнику з bash , пройти "лише" близько 32 матчів. Близько десятої буде тут:
У межах '[' і ']' класи класів символів можуть бути визначені за допомогою синтаксису [: class:], де клас є одним із таких класів, визначених у стандарті POSIX:
alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigitКлас символів відповідає будь-якому символу, що належить до цього класу.
Тоді ви перейдете до стандарту POSIX, де ви можете шукати термін "клас символів" і знаходити
wctype, wctype_l - визначте клас символів , який дає вам:
Функції wctype () [CX] [Option Start] та wctype_l () [Option End] повинні визначати значення wctype_t відповідно до правил кодованого набору символів, визначеного інформацією про тип символів у поточному локалі [CX] [Option Start] або в локалі, представленому locale, [Option End] відповідно (категорія LC_CTYPE).
Якщо ви перейшли до посилання setlocale , ви нарешті дістанетесь до своєї реальної відповіді в розділі Місцевий пошук :
простір
Визначте символи, які слід класифікувати як пробіли. В мові POSIX точно
<space>, <form-feed>, <newline>, <carriage-return>, <tab>, and <vertical-tab>потрібно включати.У файлі визначення локального запису жоден символ, вказаний для ключових слів верхній, нижній, альфа, цифра, графік або xdigit, не повинен бути вказаний.
<space>, <form-feed>, <newline>, <carriage-return>, <tab>, and <vertical-tab>Портативного набору символів, і будь-які символи , включені в клас заготовки автоматично включаються в цей клас.
less +"$cmd", тому дякую за це.
[]не залежить від внутрішнього []. Я намагався (!) Знайти шлях від запитання до відповіді, не знаючи занадто багато про те, що відповідь, хоча знадобилося кілька щасливих здогадок :)
Це не лише для Bash, воно є частиною позначення POSIX.
Що таке POSIX?
POSIX або "Інтерфейс портативної операційної системи для uniX" - це сукупність стандартів, які визначають деякі функції, які повинна підтримувати операційна система (UNIX). Один із цих стандартів визначає два аромати регулярних виразів.
POSIX дужкові вирази
Виразні дужки POSIX - це особливий вид класів символів. Виразні дужки POSIX відповідають одному символу з набору символів, як і звичайні класи символів.
Стандартний POSIX
[[:alnum:]] Alphanumeric characters
[[:alpha:]] Alphabetic characters
[[:blank:]] Space and tab
[[:cntrl:]] Control characters
[[:digit:]] Digits
[[:graph:]] Visible characters (anything except spaces and control characters)
[[:lower:]] Lowercase letters
[[:print:]] Visible characters and spaces (anything except control characters)
[[:punct:]] Punctuation (and symbols).
[[:space:]] All whitespace characters, including line breaks
[[:upper:]] Uppercase letters
[[:xdigit:]] Hexadecimal digits
Ніякі стандарти
[[:ascii:]] ASCII characters
[[:word:]] Word characters (letters, numbers and underscores)
застарілий синтаксис (чи може хтось знайти посилання на них?)
[[:<:]] Start of Word
[[:>:]] End of Word
Більше інформації ви можете знайти тут: wiki
[[:ascii:]], і [[:word:]]не є класами POSIX (вони, здається, є bashспецифічними), і я не можу знайти [[:<:]]ні того, ні [[:>:]]іншого. Краще посилання може бути pubs.opengroup.org/onlinepubs/9699919799/basedefs/…
[[:ascii:]]і [[:word:]]немає жодного стандартного класу POSIX. бо [[:<:]]і [[:>:]]я не можу знайти жодних посилань, але це так само \b. en.wikipedia.org/wiki/Regular_expression#Character_classes
[[:<:]]та стверджує, що: Це розширення, сумісне з POSIX 1003.2, але не визначене
[[:<:]]також у FreeBSD, з тим самим застереженням, що і PostgreSQL: freebsd.org/cgi/…
[[:ascii:]]та [[:word:]], звичайно ж, робота в Bash в зіставленні з зразком, але не в регулярних виразах (принаймні , в моїй системі, я думаю , що Bash використовує бібліотеку регулярних виразів системи). Ба.
У регулярних виразах і шаблонах імен глобусів / оболонок [...]конструкція відповідає будь-якому одному символу з тих, що вказані в дужках. У цих дужках може використовуватися ряд названих стандартних класів символів . Одне з них - це те [:space:], що відповідає символам пробілів (наприклад, \sу регексах Perl). Дивіться, наприклад, Збірка шаблонів у посібнику Баша
Отже, [[:space:]]є частиною регулярного збігу виразів або зразків, що відповідає простому пробілу.
Наприклад, відповідність шаблону (стандартна оболонка, а не Bash):
case $var in
*[[:space:]]*) echo "'$var' contains whitespace";;
esac
або регулярний вираз (Bash):
if [[ $var =~ [[:space:]] ]]; then
echo "'$var' contains whitespace"
fi
Зауважте, що хоч вирази дужок [...]працюють однаково у звичайних виразах та шаблонах оболонок, вони, як правило, не однакові. ( caseі [[ string == pattern ]]використовувати відповідність шаблонів, [[ string =~ regex ]]використовує регулярні вирази.)
Регулярні вирази також не стосуються оболонки, вони використовуються, наприклад, awkі sedзанадто, і описані, наприклад, на сторінці man man на Linuxregex(7)
LESS=+'/Within \[ and \],' man bashа не 32nкоманди ext :-).