Символ []

10.8.2 Символы квадратных скобок []

При использовании .символа ему может соответствовать любой возможный символ. В некоторых случаях вы хотите точно указать, какие символы вы хотите сопоставить, например строчные буквы алфавита или цифры.

Квадратные скобки [ ]соответствуют одному символу из списка или диапазона возможных символов, заключенных в скобки. Например, для profile.txtфайла:

sysadmin@localhost:~/Documents$ cat profile.txt
Hello my name is Joe.
I am 37 years old.
3121991
My favorite food is avocados.
I have 2 dogs.
123456789101112

Чтобы найти все строки, в profile.txtкоторых есть числа, используйте шаблон [0123456789]или [0-9]:

sysadmin@localhost:~/Documents$ grep '[0-9]' profile.txt
I am 37 years old.
3121991
I have 2 dogs.
123456789101112

Обратите внимание, что каждый возможный символ может быть указан [abcd]или предоставлен в виде диапазона [a-d], если диапазон находится в правильном порядке. Например, [d-a]не будет работать, потому что это недопустимый диапазон:

sysadmin@localhost:~/Documents$ grep '[d-a]' profile.txt
grep: Invalid range end

Диапазон определяется стандартом, называемым таблицей ASCII. Эта таблица представляет собой набор всех печатных символов в определенном порядке. Вы можете увидеть таблицу ASCII с помощью asciiкоманды. Небольшой образец:

      041  33  21  !                                 141   97  61  a 
      042  34  22  “                                 142   98  62  b
      043  35  23  #                                 143   99  63  c
      044  36  24  $                                 144   100 64  d
      045  37  25  %                                 145   101 65  e
      046  38  26  &                                 146   102 66  f

Значение ASCII буквы aравно 97, а значение dравно 100. Так как 97меньше 100, диапазон a- d( 97- 100) является допустимым диапазоном.

Как насчет исключения символов? Например, для соответствия символу, который может быть любым, кроме x, yили z? Было бы неэффективно предоставлять набор со всеми символами, кроме x, yили z.

Чтобы сопоставить символ, который не является одним из перечисленных символов, начните набор с ^символа. Чтобы найти все строки, содержащие любые нечисловые символы, вставьте a ^в качестве первого символа внутри квадратных скобок. Этот символ отрицает перечисленные символы:

sysadmin@localhost:~/Documents$ grep '[^0-9]' profile.txt
Hello my name is Joe.
I am 37 years old.
My favorite food is avocados.
I have 2 dogs.

Last updated