使用 ls 进行管道传输时,solaris 中的 grep 不起作用

san*_*who 3 linux unix grep solaris egrep

我在solaris中使用以下命令

ls -l | grep '*PROC*'
Run Code Online (Sandbox Code Playgroud)

但它不起作用。我有许多文件的名称中包含“PROC”,例如“XREF_PROC.complete”,但是当我使用上述命令时,它没有显示任何输出。当我使用ls *PROC*它的工作但不使用 grep 时。

谢谢

Tho*_*hor 10

tl;博士

您不需要量词,只需为 PROC 使用 grep:

ls | grep PROC
Run Code Online (Sandbox Code Playgroud)

长版

ls行中的星号与您行中 的星号不同grep

当您在命令行上有一个未转义的星号时,shell 会在ls看到它之前将其展开,这称为globbing。单独的星号会扩展到当前目录中的所有文件,例如echo *. 该*PROC*水珠将扩大到包含PROC所有文件。

您使用的是带有星号grep 逃脱了单引号,因此将被解释grep。但是,默认情况下grep使用BRE(基本正则表达式),其中星号用作量词,因此需要一些字符或字符类来量化,例如'.*'.

  • @sandywho:请注意,您 _not_ 转义星号,这意味着 shell 将在 grep 看到它之前扩展 `*PROC*`。这个*仅*在只有一个文件名中带有 PROC 时才有效。总是转义给 grep 的模式! (2认同)