我想知道我正在使用的命令中的语法错误是什么。
在当前目录中,我使用命令ls -l
来检索目录中的文件权限。
我如何查询哪些文件是用户可读,可写和可执行的,然后使用awk打印过滤后的列表?
我知道我感兴趣的是第二,第三和第四。
例如,
-rw-r----- .. .. .. ..
或
drw-r----- .. .. .. ..
我有一个awk命令如下:
ls -l | awk '{if{$1 == /.rwx....../}print "line"}'
我尝试了很多东西,但仍然存在语法错误。
非常感谢任何帮助!提前谢谢!
答案 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) }'