service --status-all
Выводит список всех служб с кодом состояния, остановленных или выключенных (-), запущенных или включенных (+) или неизвестных (?), что означает отсутствие раздела кода состояния в их инициализации. д сценарий. Не только запуск служб.
«P *»
что-то соответствует (или not ) из вашей оболочки до того, как grep увидит параметр. Если вы процитируете его, вы получите лучшие результаты, но имейте в виду, что grep соответствует регулярным выражениям, а не глобам.
Так что просто «П» подойдет. Поскольку это регулярное выражение, вам не нужна звездочка *
, чтобы разрешить сопоставление символов, следующих за «P»
(по умолчанию grep игнорирует их):
ls -p | grep -v / | grep "P"
или
ls -p | grep -v / | grep '^P'
В продолжение измененного вопроса, чтобы игнорировать регистр, используйте параметр -i
команды grep, например,
ls -p | grep -v / | grep -i '^P'
Дополнительная литература:
- i
Выполнять сопоставление с образцом при поиске без учета регистра; см. Общие требования к регулярным выражениям XBD .
-p
Записать ('/'
) после каждого имени файла, если этот файл является каталогом.
Во второй команде вы grep P *
. Это побудит оболочку выполнить подстановку имен файлов на P *
, т.е. она расширит P *
на все файлы, начинающиеся с буквы P
.
Используйте set -x
в вашей оболочке, чтобы увидеть, что выполняется (отключите трассировку с помощью set + x
). На самом деле у меня по умолчанию включена трассировка в моих собственных интерактивных сеансах оболочки, просто чтобы посмотреть, что я делаю .
Использование двойных кавычек P *
не решит этой проблемы, поскольку регулярное выражение P *
также соответствует таким именам файлов, как APPLE
и ]файл.PP
, а на самом деле hello_world.c
и все другие имена файлов, а также P *
также сопоставляют имена файлов с no P
в них.
Как правило, вы не должны анализировать вывод ls
, поэтому следующий способ будет лучшим способом получить список файлов (не каталогов), начинающихся с буквы P
:
$ find . -type f -maxdepth 1 -name "P*"
Это найдет все обычные файлы ( -тип f
) в текущем каталоге (.
) с именами, начинающимися с P
( -название "P *"
). Параметр -maxdepth 1
ограничивает find
только этим каталогом. В противном случае он также рекурсивно переместился бы в подкаталоги.
Что касается , найдите
, что вы делаете с помощью grep -v /
, т.е. удаляете каталоги из списка, а не выбираете обычные файлы:
$ find . ! -type d -maxdepth 1 -name "P*"
Также будут найдены нестандартные файлы, такие как сокеты и т. Д. В некоторых оболочках необходимо экранировать или заключать в кавычки !
, т.е. говоря
$ find . "!" -type d -maxdepth 1 -name "P*"
или
$ find . \! -type d -maxdepth 1 -name "P*"
Обратите внимание, что цитирование P *
важно, чтобы ваша оболочка не расширяла его.