递归搜索不适用于solaris上的grep


20

在我们的Solaris服务器上,我发现这grep -r不起作用,这是我通常使用的方式grep。似乎egrep具有相同的行为。

鉴于我无法控制计算机,是否有办法grep执行递归搜索?还是我需要将输入输出findgrep


1
您正在使用哪个Solaris发行版?
jlliagre 2011年

Answers:


4

我对Solaris不熟悉,但是如果您从GNU / linux切换到Solaris,您会发现大多数命令的行为都会稍有不同。GNU版本的Unix工具具有“专有” Unix中缺少的其他功能。

您可以在此处下载GNU grep 然后进行编译和安装。

如果您具有root用户访问权限,则可能需要运行configure --prefix = / usr / local,以便将实用程序安装到/ usr / local

如果您没有超级用户访问权限,则可能需要运行configure --prefix = $ {HOME},以便将实用程序安装到您的主目录中


--prefix=${HOME}}/.local可能更可取...无需将主目录与sharelib文件夹
打乱

1
一个人杂乱无章是另一个人的组织
bsd

毫无疑问!老实说,当我说:“ share?这一定是一个垃圾目录!rm -rfh!
jpaugh

31

如果要使用find,这将是最快的方法:

find . -type f -exec grep pattern {} +

但是,您的计算机上很可能已经安装了Gnu grep。

它是Solaris 11中默认安装的一部分/usr/gnu/bin/grep。在Solaris 10中也可以找到它/usr/sfw/bin/ggrep。在较旧的发行版中,可能已从sunfreeware或其他存储库中安装了该软件,请检查/usr/local/bin/grep/opt/csw/bin/grep在公共位置安装。


您还可以通过使用该-name选项find
sleepyweasel

@sleepyweasel -name不会在文件内部搜索,而只会搜索OP要求的文件名。
jlliagre

6

如果已安装,请改用ggrep

例如,从当前目录向下搜索所有子目录(-R),然后显示匹配的文件名和路径(-H),并忽略二进制文件(-I)。不要忘记*命令末尾的。

/usr/sfw/bin/ggrep -H -R -I "mysearchstring" *

ggrep位于。/usr/sfw/bin 您可以使用EXPORT命令将其添加到您的配置文件中,以便可以直接从命令行调用它。

PATH=$PATH:/usr/sfw/bin
export PATH

Solaris版本:SunOS 5.10 Generic_147440-13 sun4u sparc SUNW,SPARC-Enterprise


1
至少在我的系统上,ggrep确实是GNU grep。谢谢!
jpaugh

3

ackhttp://betterthangrep.com/下载独立的perl脚本,将其放入您的中$HOME/bin,并学会使用它。正如我所宣传的那样,在日常开发工作中,我发现它在很多方面都比grep好。


3

Solaris grep没有-r选项。

您可以使用以下命令。

find . -type f | xargs grep 'sometext'

2
您不需要“控制系统”来编译GNU grep并将其安装在主目录下的某个位置。
基思·汤普森

@KeithThompson感谢指出。我已经纠正了我的答案。
2011年

查找与名称模式匹配的所有文件并与文件一起显示结果非常有用。例如 find /opt/ -name "*.sh" -type f | xargs grep "start"
颠覆2015年

1

是的,您将需要GNU grep。就我个人而言,我不会错过“ -r”标志,因为您可以结合使用find和来做同样的事情,grep但是这提醒我,在我的Solaris机器上提供GNU工具是我认为的最佳实践。所以我们开始:

我不会从Internet的各个位置下载源代码,然后自己构建。那是没有必要的。如果您只是想让Solaris具有典型的GNU工具,请执行以下操作:

如果您使用的是Solaris 10,则应该获得Solaris 10随附磁盘。它曾经由Sun发行,但现在居住在这里。就个人而言,我总是习惯于安装此磁盘或至少最重要的GNU部件的内容。使其成为组织中新服务器的JumpStart(或使用的任何设备)的一部分!

如果您使用的是Solaris 11,则生活会简单得多。通常默认情况下会安装GNU工具,但并非所有工具都会传播到本地区域。IFS是Solaris 11上的打包系统,它使您的生活变得更加轻松,因此您确实应该转向Solaris 11(还有许多其他原因)。您应该始终考虑可用于任何区域的软件包列表如下:

pkg:// solaris / archiver / gnu-tar
pkg:// solaris / developer / gnu-binutils
pkg:// solaris / diagnostic / top
pkg:// solaris / file / gnu-coreutils
pkg:// solaris / file / gnu-findutils
pkg:// solaris / text / gawk
pkg:// solaris / text / gnu-diffutils
pkg:// solaris / text / gnu-grep
pkg:// solaris / text / gnu-sed

如果将主机用于开发/构建目的,则可能需要添加:

pkg:// solaris / developer / build / gnu-make
pkg:// solaris / developer / build / make
pkg:// solaris / developer / gcc-45
pkg:// solaris / system / header
pkg:// solaris / developer / build / autoconf
pkg:// solaris / developer / build / automake-110

就我个人而言,我会将以上(可能更少的开发工具)作为公司新服务器/区域默认安装的一部分。Solaris系统管理员通常坚持要与Linux世界有所不同,但实际上没有必要。只需执行此操作,并将其作为默认安装的一部分即可。你不会后悔的。


我不确定您是否读过我说过的那部分,“我无法控制机器...”,我确定这对某人是有用的信息,但这绝不是我所问问题的答案。
埃里克·威尔逊

它是您的系统管理员的信息。他给了你一台残废的机器恕我直言。这些东西应该默认安装。但是,是的,您是对的,这些信息可能也同样适用于来到此地并阅读您的问题的其他人。今天您缺少GNU grep,明天您将会缺少GNU tar等。您只是还不知道。:-)
peterh 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.