【问题标题】:How to grep particular string occurring multiple times [duplicate]如何grep多次出现的特定字符串[重复]
【发布时间】:2014-01-21 13:24:15
【问题描述】:

我想捕获一个字符串“受影响的 1 行..”。但问题是在同一个文件中没有这样的字符串。

我担心仅在日志文件中的字符串“UPDATE kplustp..Service SET Service_Name = "PositionService", ServiceType = \'Z\', Hostname = " " " 之后捕获“受影响的 1 行..” . “1 行受影响..”将在“ UPDATE kplustp..Service SET Service_Name = "PositionService", ServiceType = \'Z\', Hostname = " " "

的 3 4 句后出现

我正在开发 solaris。

怎么办?

【问题讨论】:

  • 天哪,请耐心等待,将您的搜索字符串替换为 foobar 之类的内容。
  • @user3164140 不要转发same question!相反,如果您需要更改某些内容,请编辑您的问题。

标签: shell solaris solaris-10


【解决方案1】:

使用 ggrep 和 --byte-offset 选项来查找最后一个字符串的字节位置,该位置将出现在您要匹配的字符串之前。然后使用 -c 选项将其输入 /usr/xpg4/bin/tail 以生成文件的截断版本,该版本仅包含该字节位置之后的部分。然后您就可以进行搜索了。

例如,搜索 file.txt 以查找包含“foo”的行,但仅在包含“bar”的所有行的最后一行之后:

/usr/xpg4/bin/tail -c +`ggrep --byte-offset bar file.txt | cut -d: -f1 | tail -1` file.txt | grep foo

这在 Solaris 上比在 Linux/BSD 上要困难一些,因为默认的 tail 和 grep 是古老的并且缺少必要的选项。知道如何找到 grep (ggrep) 的 GNU 版本以及某些命令的 XPG4 (X/Open CAE Portability Guide 4) 版本具有有用的附加选项是成功的一半。两者都应该安装在大多数 Solaris 10 系统上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 2019-01-05
    相关资源
    最近更新 更多