Символ []
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