我想 grepls -l命令的输出:
-rw-r--r-- 1 root root 1866 Feb 14 07:47 rahmu.file
-rw-r--r-- 1 rahmu user 95653 Feb 14 07:47 foo.file
-rw-r--r-- 1 rahmu user 1073822 Feb 14 21:01 bar.file
Run Code Online (Sandbox Code Playgroud)
我只想grep rahmu在 $3 列上运行,因此我的grep命令的输出应如下所示:
-rw-r--r-- 1 rahmu user 95653 Feb 14 07:47 foo.file
-rw-r--r-- 1 rahmu user 1073822 Feb 14 21:01 bar.file
Run Code Online (Sandbox Code Playgroud)
最简单的方法是什么?答案必须可以在许多 Unices 之间移植,最好侧重于 Linux 和 Solaris。
注意:我不是在寻找一种方法来查找属于给定用户的所有文件。这个例子只是为了让我的问题更清楚。
rah*_*hmu 62
多一点时间就awk可以节省一天!
这是一个简单的方法,使用相对简单的语法:
ls -l | awk '{if ($3 == "rahmu") print $0;}'
Run Code Online (Sandbox Code Playgroud)
甚至更简单:(感谢评论中的 Peter.O)
ls -l | awk '$3 == "rahmu"'
Run Code Online (Sandbox Code Playgroud)
Col*_*n D 23
如果您只想匹配给定列上的部分字符串,您可以使用来自/sf/ask/1190129461/ 的建议
some_command | awk '$6 ~ /string/'
Run Code Online (Sandbox Code Playgroud)
jfg*_*956 12
如果按列,您的意思是固定大小的列,您可以:
ls -l | grep "^.\{15\}rahmu"
Run Code Online (Sandbox Code Playgroud)
其中^表示行的开头,.表示任何字符,并\{15\}表示前一个字符(在本例中为任何字符)恰好出现 15 次。
我知道我迟到了,但我相信这个问题的一个非常通用的解决方案是使用 awk 和正则表达式,如下所示:
awk '$3~/rahmu/{print}' input_file
Run Code Online (Sandbox Code Playgroud)
“//”包围的部分可以是任何类型的正则表达式。