我正在为我的班级(在Unix中)处理以下问题,并且我遇到了一些问题。
使用
grep
命令和正则表达式,创建基于管道的 将列出默认目录中的所有文件的命令链 其他人可以阅读或写作。
这是我到目前为止的命令,它将正确匹配正确的行,但我只想打印具有所需权限的文件的名称。
ls -la | grep "^.......rw.*:\d\d\s(.*)$"
这里只是按照我的方式键入ls -la
的结果" greping"
total 344
drwxr-xr-x 10 cameronpattisall staff 340 Apr 7 11:21 .
drwxr-xr-x 7 cameronpattisall staff 238 Apr 7 11:22 ..
-rw-r--r-- 1 cameronpattisall staff 6148 Apr 7 11:21 .DS_Store
-rw-r--r-- 1 cameronpattisall staff 11591 Apr 7 11:21 DifferencesToTagged.txt
-rw-r--r-- 1 cameronpattisall staff 4291 Apr 7 11:21 functions.py
-rw-r--r-- 1 cameronpattisall staff 6080 Apr 7 11:21 ls.txt
-rw-r--r-- 1 cameronpattisall staff 5511 Apr 7 11:21 prog4.py
-rw-r--r-- 1 cameronpattisall staff 345 Apr 7 11:21 shared.py
-rw-r--r-- 1 cameronpattisall staff 1832 Apr 7 11:21 subversion-log.txt
-rw-r--r-- 1 cameronpattisall staff 122295 Apr 7 11:21 testcases.txt
答案 0 :(得分:0)
我想解决方法是使用:
grep -E "^-.{6}(r|.w)"
第一列的结构是" - / d" (档案/目录)+ xxx
(所有者)+ xxx
(群组)+ xxx
(其他)。
所以你想匹配那些以-
(文件)开头并包含在" gorup"部分为r..
或.w.
。
要仅打印文件名,您可以输入grep -o '[^ ]*$'
。这将打印最后一个文本块。请注意,这是非常脆弱的,因为在带有空格的文件名中,它只会打印最后一个。
我将ls -la
存储在文件a
中:
$ grep -E "^-.{6}(r|.w)" a | grep -o '[^ ]*$'
.DS_Store
DifferencesToTagged.txt
functions.py
ls.txt
prog4.py
shared.py
subversion-log.txt
testcases.txt
答案 1 :(得分:0)
如果您已匹配正确的行,则可以附加类似
的内容 | tr -s ' ' | cut -d ' ' -f 9-
到你的管道。
tr -s ' '
用一个空格替换多个连续的空格; cut
命令从每行删除除第九个字段以外的所有内容,并用单个空格字符分隔字段。