Unix grep未提取所需字符串

Unix grep未提取所需字符串,unix,grep,command,ls,Unix,Grep,Command,Ls,我正在为我的类(在Unix中)处理以下问题,我遇到了一些问题 使用grep命令和正则表达式,创建基于管道的 列出默认目录中所有文件的命令链 其他人可以读或写 这是我到目前为止使用的命令,它将正确匹配正确的行,但我只想打印具有所需权限的文件名 ls -la | grep "^.......rw.*:\d\d\s(.*)$" 这里是只需键入ls-la的结果,顺便说一下,这就是我正在“greping”的内容 我想解决办法是使用: grep -E "^-.{6}(r|.w)" 第

我正在为我的类(在Unix中)处理以下问题,我遇到了一些问题

使用
grep
命令和正则表达式,创建基于管道的 列出默认目录中所有文件的命令链 其他人可以读或写

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

ls -la | grep "^.......rw.*:\d\d\s(.*)$"
这里是只需键入
ls-la
的结果,顺便说一下,这就是我正在“greping”的内容


我想解决办法是使用:

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

如果已经匹配了正确的行,那么可以附加如下内容

| tr-s'| cut-d'-f9-
到您的管道


tr-s'
用单个空格替换多个连续空格;
cut
命令从每行开始删除除第九个字段以外的所有内容,这些字段由单空格字符分隔。

您使用的是什么
grep
?我认为标准的
grep
不能识别
\d
\s
或括号。您可能需要查看手册页面。如果是这样的话,您可能会遇到一些行的问题,因为
ls-l
不显示旧文件的时间。
$ 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