如果当我通过ls管道时"文件名"匹配时,如何告诉grep只打印出行?我想让它忽略每一行上的所有内容,直到时间戳之后.必须有一些简单的方法可以在一个命令上执行此操作.
正如你所看到的,没有它,如果我搜索文件"rwx",它不仅会返回rwx.c行,还会返回前三行因为权限.我打算使用AWK,但如果我搜索"rwx",我希望它显示整个最后一行.
有任何想法吗?
编辑:谢谢你下面的黑客攻击.但是,拥有更多无错误的方法会很棒.例如,如果我有一个名为"rob rob"的文件,我将无法使用所述解决方案.
drwxrwxr-x 2 rob rob 4096 2012-03-04 18:03 .
drwxrwxr-x 4 rob rob 4096 2012-03-04 12:38 ..
-rwxrwxr-x 1 rob rob 13783 2012-03-04 18:03 a.out
-rw-rw-r-- 1 rob rob 4294 2012-03-04 18:02 function1.c
-rw-rw-r-- 1 rob rob 273 2012-03-04 12:54 function1.c~
-rw-rw-r-- 1 rob rob 16 2012-03-04 18:02 rwx.c
-rw-rw-r-- 1 rob rob 16 2012-03-04 18:02 rob rob
Run Code Online (Sandbox Code Playgroud)
小智 12
以下将仅列出文件名,每行中包含一个文件.
$ ls -1
Run Code Online (Sandbox Code Playgroud)
包括 .档
$ ls -1a
Run Code Online (Sandbox Code Playgroud)
请注意,参数是数字"1",而不是字母"l".
为什么不使用 grep 并匹配时间戳后面的文件名?
grep -P "[0-9]{2}:[0-9]{2} $FILENAME(\.[a-zA-Z0-9]+)?$"
Run Code Online (Sandbox Code Playgroud)
是[0-9]{2}:[0-9]{2}时间, 是$FILENAME您放置rob rob或 的位置rwx,尾随(\.[a-zA-Z0-9]+)?是为了允许可选扩展。
编辑:@JonathanLeffler 下面指出,当文件超过大约 6 个月时,时间列会被替换为一年 - 无论如何,这就是我的计算机上发生的情况。您可以([0-9]{2}:[0-9]{2}|(19|20)[0-9]{2})留出时间或年份,但最好使用 awk (?)。
[foo@bar ~/tmp]$ls -al
total 8
drwxrwxr-x 2 foo foo 4096 Mar 5 09:30 .
drwxr-xr-- 83 foo foo 4096 Mar 5 09:30 ..
-rw-rw-r-- 1 foo foo 0 Mar 5 09:30 foo foo
-rw-rw-r-- 1 foo foo 0 Mar 5 09:29 rwx.c
-rw-rw-r-- 1 foo foo 0 Mar 5 09:29 tmp
[foo@bar ~/tmp]$export filename='foo foo'
[foo@bar ~/tmp]$echo $filename
foo foo
[foo@bar ~/tmp]$ls -al | grep -P "[0-9]{2}:[0-9]{2} $filename(\.[a-zA-Z0-9]+)?$"
-rw-rw-r-- 1 cha66i cha66i 0 Mar 5 09:30 foo foo
Run Code Online (Sandbox Code Playgroud)
(如果您愿意,您还可以扩展到匹配整行:
^ # start of line
[d-]([r-][w-][x-]){3} + # permissions & space (note: is there a 't' or 's'
# sometimes where the 'd' can be??)
[0-9]+ # whatever that number is
[\w-]+ [\w-]+ + # user/group (are spaces allowed in these?)
[0-9]+ + # file size (modify for -h switch??)
(19|20)[0-9]{2}- # yyyy (modify if you want to allow <1900)
(1[012]|0[1-9])- # mm
(0[1-9]|[12][0-9]|3[012]) + # dd
([01][0-9]|2[0-3]):[0-6][0-9] +# HH:MM (24hr)
$filename(\.[a-zA-Z0-9]+)? # filename & optional extension
$ # end of line
Run Code Online (Sandbox Code Playgroud)
。你明白了,根据你的需求定制。)