grep没有提取所需的字符串

时间:2015-04-08 22:05:34

标签: unix grep command ls

我正在为我的班级(在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

2 个答案:

答案 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命令从每行删除除第九个字段以外的所有内容,并用单个空格字符分隔字段。