我正在尝试在 UNIX 上编写此命令:
ls -l | sed 'p/^.rwx'
但我收到以下错误:
sed: -e expression #1, char 2: extra characters after command
我正在尝试打印用户拥有所有权限的文件/目录(rwx)
答案1
你的p
rint 命令需要出现在最后,并且你还想默认禁止打印:
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
(错误地)匹配正则表达式。使用 shell glob ( *
) 可以避免这个问题。
另一种方法是使用find
:
find . ! -name . -prune -perm -700 -ls
答案2
答案3
你想运行这个:
ls -l | sed -n '/^.rwx/p'
n -> 只打印匹配的数据
^.rwx -> 以任意字符开头,后跟 rwx。
p -> 打印数据