Путаница с использованием grep с *?

Последние Nodejs Шаг 1 -:

cd /opt/
wget https://nodejs.org/dist/v6.2.1/node-v6.2.1.tar.gz

Извлеките исходный код tar.gz

tar -xvf node-*.tar.gz

Шаг 2-: Скомпилируйте и установите nodejs.

cd node-v6.2.1
./configure
make
$ sudo make install

Примечание: Если вы обнаружили ошибку «make command not found»

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential
gcc -v
make -v
1
задан 7 August 2017 в 19:53

6 ответов

Когда вы выполняете grep ls*, оболочка сначала расширяет ls* до списка совпадающих файлов в текущем каталоге, поэтому команда становится

ls -l | grep ls lsblk lsmod

. В этом случае grep будет игнорировать стандартный ввод и обрабатывать первый аргумент ls как шаблон, который будет сопоставляться shell с файлами lsblk и lsmod, как если бы вы набрали grep ls lsblk lsmod (предположительно в /bin ]):

$ grep ls lsblk lsmod
Binary file lsblk matches
Binary file lsmod matches

С другой стороны, если в текущем каталоге нет совпадений glob и параметр nullglob оболочки не установлен, тогда ls* будет оставлен нерасширенным, так что grep увидит ls* и сопоставляет любые имена файлов, соответствующие l, за которыми следуют ноль или более s символов (в основном любое имя файла с l в нем), например:

$ pwd
/home/steeldriver
$ echo ls*
ls*

(нет файлов, соответствующих оболочке glob ls* в моем домашнем каталоге); то

$ ls /bin | grep 'ls*'
bzless
chacl
false
.
.
.
zless

tl; dr не делает этого

4
ответ дан 22 May 2018 в 19:42
  • 1
    [F1] игнорирует stdin? Он даже не обращает внимания на то, что было в трубке? Кроме того, если я запустил ls -l /bin | grep ls*, результат выглядит так, как это соответствует регулярному выражению l(s*), есть ли объяснение? – scohe001 7 August 2017 в 20:31
  • 2
    @ scohe001 yes Я считаю, что это так: как man grep говорит: "Если файлы не указаны, или если задан файл" - ", grep ищет стандартный ввод. " . Во втором случае, если у вас установлена ​​nullglob вашей оболочки, тогда , если в вашем текущем каталоге нет совпадающих файлов, тогда оболочка оставит ls* un расширенной , который grep будет обрабатываться как соответствие регулярному выражению l, за которым следует ноль или более s s. – steeldriver 7 August 2017 в 20:40

Когда вы выполняете grep ls*, оболочка сначала расширяет ls* до списка совпадающих файлов в текущем каталоге, поэтому команда становится

ls -l | grep ls lsblk lsmod

. В этом случае grep будет игнорировать стандартный ввод и обрабатывать первый аргумент ls как шаблон, который будет сопоставляться shell с файлами lsblk и lsmod, как если бы вы набрали grep ls lsblk lsmod (предположительно в /bin ]):

$ grep ls lsblk lsmod Binary file lsblk matches Binary file lsmod matches

С другой стороны, если в текущем каталоге нет совпадений glob и параметр nullglob оболочки не установлен, тогда ls* будет оставлен нерасширенным, так что grep увидит ls* и сопоставляет любые имена файлов, соответствующие l, за которыми следуют ноль или более s символов (в основном любое имя файла с l в нем), например:

$ pwd /home/steeldriver $ echo ls* ls*

(нет файлов, соответствующих оболочке glob ls* в моем домашнем каталоге); то

$ ls /bin | grep 'ls*' bzless chacl false . . . zless

tl; dr не делает этого

4
ответ дан 18 July 2018 в 08:55

Когда вы выполняете grep ls*, оболочка сначала расширяет ls* до списка совпадающих файлов в текущем каталоге, поэтому команда становится

ls -l | grep ls lsblk lsmod

. В этом случае grep будет игнорировать стандартный ввод и обрабатывать первый аргумент ls как шаблон, который будет сопоставляться shell с файлами lsblk и lsmod, как если бы вы набрали grep ls lsblk lsmod (предположительно в /bin ]):

$ grep ls lsblk lsmod Binary file lsblk matches Binary file lsmod matches

С другой стороны, если в текущем каталоге нет совпадений glob и параметр nullglob оболочки не установлен, тогда ls* будет оставлен нерасширенным, так что grep увидит ls* и сопоставляет любые имена файлов, соответствующие l, за которыми следуют ноль или более s символов (в основном любое имя файла с l в нем), например:

$ pwd /home/steeldriver $ echo ls* ls*

(нет файлов, соответствующих оболочке glob ls* в моем домашнем каталоге); то

$ ls /bin | grep 'ls*' bzless chacl false . . . zless

tl; dr не делает этого

4
ответ дан 24 July 2018 в 19:12

Чтобы быть более безопасным, ваш коллега должен использовать:

ls -l | grep "asdf*"

для обработки выходного потока, используя кавычки, которые мы пропускаем расширения файлов оболочки, поэтому мы говорим, что искать линии с помощью asd, за которым следует ноль или более f, лучше использовать:

ls -l | grep "asdf.*"

. Другое дело, что если бы не было файла в текущей директории, соответствующей шаблону, это будет рассмотрено как это делается grep, в большинстве случаев это то, что происходит.

Также обратите внимание, что разбор ls не является хорошим делом.

3
ответ дан 22 May 2018 в 19:42

Чтобы быть более безопасным, ваш коллега должен использовать:

ls -l | grep "asdf*"

для обработки выходного потока, используя кавычки, которые мы пропускаем расширения файлов оболочки, поэтому мы говорим, что искать линии с помощью asd, за которым следует ноль или более f, лучше использовать:

ls -l | grep "asdf.*"

. Другое дело, что если бы не было файла в текущей директории, соответствующей шаблону, это будет рассмотрено как это делается grep, в большинстве случаев это то, что происходит.

Также обратите внимание, что разбор ls не является хорошим делом.

3
ответ дан 18 July 2018 в 08:55

Чтобы быть более безопасным, ваш коллега должен использовать:

ls -l | grep "asdf*"

для обработки выходного потока, используя кавычки, которые мы пропускаем расширения файлов оболочки, поэтому мы говорим, что искать линии с помощью asd, за которым следует ноль или более f, лучше использовать:

ls -l | grep "asdf.*"

. Другое дело, что если бы не было файла в текущей директории, соответствующей шаблону, это будет рассмотрено как это делается grep, в большинстве случаев это то, что происходит.

Также обратите внимание, что разбор ls не является хорошим делом.

3
ответ дан 24 July 2018 в 19:12

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

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