gpt4 book ai didi

regex - 使用 -f 选项的 grep 或 fgrep 没有输出不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 09:03:13 25 4
gpt4 key购买 nike

我在文件中有以下正则表达式。顺便说一句,我在 SunOS 上

例如:文件模式包含以下几行:

Ora-[0-9]
violated

我有一个文件“数据文件”,其中包含以下内容:

0:/scm/123451/test1.sql:dbuser@database:databasedb:no:yes:ORA-1234|key violated
1:/scm/123451/test1.sql:dbuser@database:databasedb:no:yes:ORA-|key violated
2:/scm/123451/test1_A.sql:dbuser@database:databasedb:no:yes:ORA-|key violated
3:/scm/123451/test1_B.sql:dbuser@database:databasedb:yes:yes:Violated
4.giga:key violated unique:giga
5.fifa:ora-error null value found:giga

现在,我想使用命令grep -ffgrep -f 找出匹配模式文件正则表达式的行。当模式文件仅包含“Ora-[0-9]”行时,以下两个命令不起作用。

grep -if ./pattern ./datafile
frep -if ./pattern ./datafile

我是否遗漏了什么,模式文件中的模式是否需要固定字符串?

最佳答案

尝试 /usr/xpg4/bin/grep 而不是 /usr/bin/grep 这似乎是您获得结果的原因。 Solaris /usr/bin 中有许多旧的 UNIX 命令,以实现追溯兼容性。 /usr/bin/awk 是臭名昭著的。

您可以看到默认使用 grep 命令获得的 grep:

which grep

您可以通过在进入/usr/bin 之前将 /usr/xpg4/bin 放入您的 PATH 变量来更改您的进程。或者使用 grep 作为/usr/xpg4/bin/grep 的别名。

在 .profile 中添加一个别名(也许是 .bashrc,随便什么):

alias grep=/usr/xpg4/bin/grep

更改您的 PATH(再次在 .profile 或任何地方):

旧路径示例 --

 PATH=/usr/bin:/usr/sbin

示例更改 PATH

PATH=/usr/bin/xpg4/bin:/usr/bin:/usr/sbin

更改您的 PATH 会影响您现有的个人脚本的行为方式,通常是轻微但有时令人讨厌的方式。

还可以考虑仅使用 egrep -i '(ora|violated)' —— 基于您的示例的建议。这不需要模式文件。可以根据需要进行多次交替。

关于regex - 使用 -f 选项的 grep 或 fgrep 没有输出不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16473548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com