如何在单列上运行grep?

rah*_*hmu 50 grep awk

我想 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)

  • 或者:`ls -l | awk '$3=="rahmu"'` ... 顺便说一下,开头的 `(` 括号应该在 `if` 之后 ... `awk '{if($3 ...'` (10认同)
  • @Peter.O +1 来自我。您的命令更简洁、正确,因为打印是 awk 匹配的默认值。 (3认同)

Col*_*n D 23

如果您只想匹配给定列上的部分字符串,您可以使用来自/sf/ask/1190129461/ 的建议

some_command | awk '$6 ~ /string/'
Run Code Online (Sandbox Code Playgroud)

  • 这应该是最佳答案 (2认同)

jfg*_*956 12

如果按列,您的意思是固定大小的列,您可以:

ls -l | grep "^.\{15\}rahmu"
Run Code Online (Sandbox Code Playgroud)

其中^表示行的开头,.表示任何字符,并\{15\}表示前一个字符(在本例中为任何字符)恰好出现 15 次。


Pej*_*ylo 6

我知道我迟到了,但我相信这个问题的一个非常通用的解决方案是使用 awk 和正则表达式,如下所示:

awk '$3~/rahmu/{print}' input_file
Run Code Online (Sandbox Code Playgroud)

“//”包围的部分可以是任何类型的正则表达式。