UNIX:使用awk命令过滤列表?

时间:2012-05-20 21:24:54

标签: unix permissions awk

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

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

我如何查询哪些文件是用户可读,可写和可执行的,然后使用awk打印过滤后的列表?

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

例如,

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

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

我有一个awk命令如下:

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

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

非常感谢任何帮助!提前谢谢!

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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) }'