1

我想知道我正在使用的命令中的语法错误是什么。

在当前目录中,我使用命令ls -l检索目录中的文件权限。

我将如何进行查询以查看用户可读、可写和可执行的文件,然后使用 awk 打印过滤列表?

我知道我感兴趣的是第二个、第三个和第四个。

例如,

-rw-r----- .. .. .. ..

或者

drw-r----- .. .. .. ..

我有一个 awk 命令如下:

ls -l | awk '{if{$1 == /.rwx....../}print "line"}'

我已经尝试了很多东西,但仍然存在语法错误。

任何帮助是极大的赞赏!提前致谢!

4

2 回答 2

3

用于检查字符串是否与正则表达式匹配的运算符是~,不是==。此外,()围绕if语句中的条件使用:

ls -l | awk '{ if ($1 ~ /.rwx....../) print "line" }' 
于 2012-05-20T21:28:03.160 回答
0

我同意丹尼斯的观点;最好避免管道ls,如果你要做某事,你也可以正确地使用stat

stat -c '%A %N' * | awk '/^-rwx/ { print $2 }' | sed "s%^.\(.*\).$%\1%"

或者只是在 awk 中:

stat -c '%A %N' * | awk '/^-rwx/ { print substr ($2, 2, length ($2) - 2) }'

编辑:

以上失败,文件包含空格(对不起)。这考虑了空格和换行符:

stat -c '%A %N' * | awk '/^-rwx/ {print substr($0, 13, length($0) - 13) }'

于 2012-05-21T04:59:12.267 回答