Вопрос об интерфейсе командной строки Gnu/Linux с grep, ls и cat

В качестве дополнения к ответу Занны опция --valueдля systemctl showбыла введена в версии 230 systemd . Поэтому он может быть недоступен в некоторых дистрибутивах, таких как Debian Jessie.

В этом случае можно эмулировать опцию с помощью sed:

$ systemctl show -p ActiveState sshd | sed 's/ActiveState=//g'
active
$ systemctl show -p SubState sshd | sed 's/SubState=//g'  
running

0
25.03.2020, 13:23
4 ответа

Команда find была бы более подходящей:

find. -name 'cats.py' -exec cat {} \;
4
19.03.2021, 02:32

Используйте команду find. Он может найти файл и запустить над ним команду. lsимеет проблемы, особенно если задана опция -l, так как тогда у вас гораздо больше данных, чем вам нужно (файл -режим, дата, владелец,... ).

т.е. (подставляем биты в «»)

find «directory» -name '«file-name-glob-pattern»' -exec «command» {} \;

напр.

find. -name 'cats.py' -exec cat {} \;

2
19.03.2021, 02:32

Это некрасиво, но, кажется, делает то, что вы просили.

cat `sudo ls -R -l -t -r | grep cats | awk '{print $9}'`

cat `sudo ls -R -l -t -r | grep `Local\ State` | awk '{print $9}'`
0
19.03.2021, 02:32

Альтернатива find -exec, используйте расширенное подстановочное значение:

shopt -s extglob
cat **/cats.py

Дополнительно :отключить опцию extglob:

shopt -u extglob

Обратите внимание, что это похоже на -exec cat {} +вместо-exec cat {} \;

Первые запуски:

cat file1 file2 file3

Последний работает:

cat file1
cat file2
cat file3

В этом примере вывод такой же, но первый будет работать быстрее.

0
19.03.2021, 02:32

Теги

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