Опция
grep
-w
указывает, что шаблон должен соответствовать «слову», то есть «границе слова» до и после него.Я думаю, что происходит то, что идея grep о границе слова не соответствует ожидаемой.
Вы можете использовать \<
и \>
для явного соответствия границ слова.
Вот несколько примеров работы в системе Solaris 9:
% echo /dev/md/dsk/d50 84G 59G 25G 71% /data1 | grep -w /data1
% echo /dev/md/dsk/d50 84G 59G 25G 71% /data1 | grep '\</data1\>'
% echo /dev/md/dsk/d50 84G 59G 25G 71% /data1 | grep '/data1\>'
/dev/md/dsk/d50 84G 59G 25G 71% /data1
%
Очевидно, что Solaris grep
не считает границу между пробелом и символом /
границей слова.
Я предлагаю запустить man grep
и, возможно, следуя некоторым ссылкам «См. Также», чтобы увидеть, как это задокументировано.(Я пытался сделать это сам, но система Solaris, к которой у меня есть доступ, в настоящий момент испытывает проблемы.)
Если вы хотите использовать эту команду как часть достаточно переносимого сценария, вам нужно знать,что это область, в которой GNU grep
ведет себя по-разному.В моей системе Linux с GNU grep
я получаю следующее:
% echo /dev/md/dsk/d50 84G 59G 25G 71% /data1 | grep -w /data1
/dev/md/dsk/d50 84G 59G 25G 71% /data1
% echo /dev/md/dsk/d50 84G 59G 25G 71% /data1 | grep '\</data1\>'
% echo /dev/md/dsk/d50 84G 59G 25G 71% /data1 | grep '/data1\>'
/dev/md/dsk/d50 84G 59G 25G 71% /data1
%
Обратите внимание, что на ваш вопрос было бы легче ответить, если бы вы показали нам точную строку, которую вы ожидали получить.*