Ошибка при использовании sed

Я пытаюсь распечатать напишите эту команду в UNIX:

ls -l | sed 'p/^.rwx'

Но я получаю следующую ошибку:

sed: -e expression #1, char 2: extra characters after command

Я пытаюсь распечатать файлы / каталоги, в которых у пользователя есть все разрешения (rwx)

0
10.05.2017, 18:52
3 ответа

Ваша команда print должна идти в конце, и вы также хотите запретить печать по умолчанию:

ls -l | sed -n '/^.rwx/p'

Если вы работаете в системе с stat, есть еще один способ решить проблему:

for f in *
do
  stat -c "%a" "$f" | grep -q ^7 && printf "%s\n" "$f"
done

Опасно полагаться на вывод ls; представьте, что кто-то создал такой файл:

touch $'foo\n-rwx some file'

... который создаст отдельную строку в выводе ls, которая (ложно) соответствует регулярному выражению. Использование оболочки оболочки (*) позволяет избежать этой проблемы.

Еще один способ — использовать find:

find . ! -name . -prune -perm -700 -ls
3
28.01.2020, 02:33

Вы хотите запустить это:

ls -l | sed -n '/^.rwx/p'

n -> Печатает только совпадающие данные

^.rwx -> Начиная с любого символа, но за которым следует rwx.

p -> Распечатать данные

-1
28.01.2020, 02:33

Для вашей конкретной проблемы рассмотрите возможность использования

find . -perms 700 -maxdepth 1 -ls

или

find . -perms /u+rwx -maxdepth 1 -ls

Ссылки.

0
28.01.2020, 02:33

Теги

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