Я хотел перечислить содержимое pwd и отображать только файл, начинающийся с точки. Я пытался, ls -a | grep ^\.
но я не могу понять, почему вывод содержит также файлы, которые не начинаются с точки. Например:
Pictures
.pip
.pki
.profile
projects
Public
Я знаю, что могу достичь того, чего хочу, ls -ld .*
мне просто любопытно такое поведение grep, которое я не могу объяснить.
grep
regular-expression
пс-Окс
источник
источник
ls -d .*
перечислить все файлы, начинающиеся с.
?Ответы:
Цитировать аргумент
grep
, таким образомls -a | grep '^\.'
Причина этого заключается в том, что оболочка обрабатывает
\.
и превращает ее обратно в обычный.
, которыйgrep
затем обрабатывается как подстановочный знак из одного символа. В случае сомнений всегда заключайте в кавычки строку, которая содержит (или может содержать) символ, особенный для оболочки.источник
grep ^\\.
\\ обрабатывается оболочкой как одиночный обратный слеш, и снова grep обрабатывает одиночный обратный слеш, за которым следует точка как буквальная точка.Вам нужно поместить выражение grep в кавычки.
Примечание: не анализируйте вывод
ls
команды .источник
Если вы выполните cmd ls -a | grep ^ \. тогда grep не считает "\" специальным символом и значением "." не спасайся
Когда мы используем cmd ls -a | grep "^ \." тогда grep рассматривает "\" как специальный символ и значение "." сбежал. Это даст вам результат, как и ожидалось.
Если вы хотите использовать grep cmd без кавычек, вам также следует экранировать символ "\". Вы можете ожидать результата без двойных кавычек, выполнив следующую команду. ls -a | grep ^ \\.
Подробнее о значении специальных символов в Regex см. По следующей ссылке. http://www.regular-expressions.info/quickstart.html
источник