Идем медленно. Если есть файл с таким содержимым (всего в одну строку, чтобы было проще показать):
$ cat infile
list[1]; i[ab1]; var[1] [1]var [1]var[2]
Простой grep --color a
покажет красным цветом все буквы a. (Поскольку этот сайт позволяет управлять цветами :Предположим, что жирный шрифт — красный):
$ grep --color a infile
list[1]; i[
аb1]; v
аr[1] [1]v
аr [1]v
аr[2]
Точно то же самое происходит, если a не -в кавычках (, как указано выше ), или если оно заключено в кавычки:
$ grep --color \a infile
list[1]; i[
аb1]; v
аr[1] [1]v
аr [1]v
аr[2]
$ grep --color "a" infile
list[1]; i[
аb1]; v
аr[1] [1]v
аr [1]v
аr[2]
$ grep --color 'a' infile
list[1]; i[
аb1]; v
аr[1] [1]v
аr [1]v
аr[2]
Почему? Потому что "а" оба:
a
в качестве первого аргумента. Либо обратная косая черта, либо двойная кавычка, либо одинарная кавычка. Если мы хотим выделить фигурные скобки ]
(, начнем с закрывающей скобки):
$ grep --color ] infile
list[1
]; i[ab1
]; var[1
][1
]var [1
]var[2
]
То же самое произойдет, если ]
были процитированы (любой цитатой ).
В этом случае ]
является специальным для оболочки, но не в этом случае, когда нет соответствующей открывающей скобки.
Для закрывающей скобки все становится на один шаг сложнее. Все это вызывает ошибку:
grep --color [ infile
grep --color '[' infile
grep --color "[" infile
Почему? Потому что то, что grep получает в всех случаях, является одним [
.
Вы можете понять, что делает оболочка с помощью этого простого эха:
$ echo \[ "[" '['
[ [ [
Оболочка удаляет один уровень цитирования, и все значения выглядят одинаково.
Но то, что grep хочет получить, чтобы понять, что мы на самом деле ищем символ [
, — это квадратная скобка в кавычках с обратной косой чертой(\[
).Так и будет со всем этим:
$ echo \\[ "\[" '\['
\[ \[ \[
И grep будет работать с любым из них:
$ grep --color \\[ infile
list
[ 1]; i
[ ab1]; var
[ 1]
[ 1]var
[ 1]var
[2]
Использование[[]
(списка символов только с одним символом )приведет к тому же результату (, пока он заключен в кавычки ).
$ grep --color '[[]' infile
list
[ 1]; i
[ ab1]; var
[ 1]
[ 1]var
[ 1]var
[2]
Grep должен получить ровно [[]
, чтобы это работало. Может показаться, что кавычки действительно не нужны:
$ echo \[\[\] "[[]" '[[]' [[]
[[] [[] [[] [[]
Но если вы создадите файл с именем [
, эта идея сломается:
$ touch \[
$ echo \[\[\] "[[]" '[[]' [[]
[[] [[] [[] [
, потому что [
является специальным для оболочки. В оболочке он запускает шаблон подстановки имени файла. Если файл (или несколько )соответствуют шаблону, подставляется список файлов.
Итак, это будет работать правильно:
$ grep --color '[[]' infile
list
[ 1]; i
[ ab1]; var
[ 1]
[ 1]var
[ 1]var
[2]
И это:grep --color '[]]' infile
будет соответствовать закрывающей фигурной скобке.
Чтобы сопоставить открывающую квадратную скобку и закрывающую квадратную скобку, вам нужна определенная последовательность символов (в кавычках, конечно ).
Если вы попробуете это:
$ grep --color '[[]]' infile
Совпадения не будет, вообще никакого. Это нужно для правильной работы:
$ grep --color '[][]' infile
list
[1
] ; i
[ab1
] ; var
[1
] [
1
] var
[1
] var
[2
]
В этом конкретном порядке закрывающая фигурная скобка должна быть первым символом внутри диапазона символов.Открывающая фигурная скобка должна быть последним символом в списке символов.
Затем вы можете добавить другие символы (, только не;
):
$ grep --color '[]a-z0-9[]' infile
список[1];
i[ab1];
переменная[1][1]переменная
[1]переменная[2]
Затем вы можете добавить отсутствующий |
в диапазон и выполнить сопоставление по ссылке, которую вы разместили. Регулярное выражение в этой ссылке не такое, как здесь, и работает совсем по-другому. Он начинается с сопоставления одного [
, некоторых других символов и заканчивается закрывающим ]
. Что-то похожее на (жадный характер *
занимает всю линейку):
$ grep --color '\[.*\]' infile
list
[1]; я[аб1]; вар[1] [1]вар[1]вар[2]
Или подобное этому:
$ grep --color '[[][a-c0-9]*[]]' infile
list
[1] ; i
[ab1]; var
[1] [1]
var
[1] var
[2] `
По сути, каталоги scsi_host*
в /sys/class/scsi_hosts
представляют все контроллеры памяти, совместимые со SCSI -, которые есть в вашей системе. Каждый отдельный порт контроллера AHCI SATA может быть одним каталогом scsi_host*
; совокупность всех USB-накопителей в системе обычно представлена одним каталогом scsi_host*
; на серверах с адаптерами SAN iSCSI или FibreChannel каждый порт iSCSI порта FibreChannel может отображаться как каталог scsi_host*
.
По сути, поскольку многие протоколы хранения либо основаны на SCSI, либо связаны с ним, представление их всех в виде адаптеров SCSI определяет общий набор основных операций, которые можно выполнять со всеми ними.
На виртуальной машине количество и тип виртуальных контроллеров памяти полностью зависят от конструкции и конфигурации гипервизора виртуализации. Возможно, ваша платформа виртуализации представляет каждый виртуальный диск с отдельным виртуальным контроллером, чтобы при необходимости виртуальный диск можно было -удалить в горячем режиме с минимальным воздействием на другие виртуальные диски.