grep 没有提取所需的字符串

grep not extracting desired string

我正在为我的 class(在 Unix 中)解决以下问题,我 运行 遇到了一些问题。

Using the grep command and regular expressions, create a pipe-based chain of commands that will list all files in the default directory that others can read or write.

这是我目前使用的命令,它将正确匹配正确的行,但我只想打印具有所需权限的文件的名称。

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

我猜解决方案是使用:

grep -E "^-.{6}(r|.w)"

第一列的结构是“-/d”(file/dir)+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

如果您已经匹配了正确的行,您可以附加类似

的内容

| tr -s ' ' | cut -d ' ' -f 9- 到您的管道。

tr -s ' ' 将多个连续的 space 替换为单个 space; cut 命令从每行中删除除第九个字段以外的所有内容,字段由单个 space 个字符分隔。