Разница в двух типах команд, использующих grep

Итак, здесь у нас есть две команды:

cat /var/log/dpkg.log | grep " \install\ "
cat /var/log/dpkg.log | grep install

Почему выходы этих команд отличаются? И не могли бы вы немного объяснить первую команду. Заранее спасибо.

1
задан 22 December 2015 в 17:42

2 ответа

Вторая (более простая) форма будет соответствовать данной строке в любом месте строки: так, например, она будет соответствовать строкам, таким как установка, переустановка, установка и т. д.

Первое выражение будет соответствовать только установите , где на каждом конце есть пробел. Обратные косые черты - это что-то вроде красной селедки, поскольку кавычки уже достаточно (а первая - без необходимости - ускользает от i, а не от пространства): однако она могла быть написана с использованием только обратных слэшей в качестве

cat /var/log/dpkg.log | grep \ install\ 

(NB в конце приведенной выше команды есть буквальный пробел).

Добавление одного пробела к шаблону - это немного взломать IMHO: он не будет работать, если шаблон разделен другими пробелами (вкладки или окончания строк). Лучшим вариантом может быть использование явных границ слов, например

grep '\binstall\b' /var/log/dpkg.log

, или использование переключателя -w (--word-regexp)

grep -w 'install' /var/log/dpkg.log

(хотя они включают также дефисы как пробел - так что эквивалентность не является точной). Если вы действительно хотите, чтобы отдельные экземпляры шаблона были разделены пробелами, вы можете использовать класс символов [[:space:]] POSIX, например

grep '[[:space:]]install[[:space:]]' /var/log/dpkg.log
4
ответ дан 23 May 2018 в 14:53

Первая команда:

cat /var/log/dpkg.log | grep " \install\ "

Как заметил @ByteCommander, может быть опечатка, и команда должна быть

cat /var/log/dpkg.log | grep "\ install\ "

Это соответствует строке install с конечным и ведущим пробелом. Это также может быть достигнуто с помощью grep -w "install". Кроме того, \ не требуется, когда вы используете кавычки.

Первая команда:

cat /var/log/dpkg.log | grep install

Эта команда также соответствует строкам, которые содержат install.

установить содержимое тестового файла:

foo
bar
foobar
foo bar

Выполнить:

cat file1.txt | grep foo
foo
foobar
foo bar

cat file1.txt | grep -w foo
foo
foo bar

cat file1.txt | grep "foo "
foo bar
3
ответ дан 23 May 2018 в 14:53

Другие вопросы по тегам:

Похожие вопросы: