使用sed时出错

使用sed时出错

我正在尝试在 UNIX 上编写此命令:

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

但我收到以下错误:

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

我正在尝试打印用户拥有所有权限的文件/目录(rwx)

答案1

你的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(错误地)匹配正则表达式。使用 shell glob ( *) 可以避免这个问题。

另一种方法是使用find

find . ! -name . -prune -perm -700 -ls

答案2

对于您的具体问题,考虑使用

find . -perms 700 -maxdepth 1 -ls

或者

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

参考

答案3

你想运行这个:

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

n -> 只打印匹配的数据

^.rwx -> 以任意字符开头,后跟 rwx。

p -> 打印数据

相关内容