【问题标题】:grep for string and grep for another stringgrep 字符串和 grep 另一个字符串
【发布时间】:2019-09-05 00:02:27
【问题描述】:

我有以下内容的文件:

abc
def
ghi
abc and xyz
oooo
1234
567

现在我必须搜索“1234”,然后再次搜索“1234”上方的“abc”。这里 1234 将仅出现一次,但 abc 将多次出现,并且 abc 的位置将变化,它可能是 1234 上方的 1 行或 1234 上方的多行,我们必须在 1234 上方第一次出现 abc 。 abc 已被 grepped ,我们检查存在“和”。或者我们可以使用 grep “和”。
请帮帮我。

【问题讨论】:

  • 你的问题不完整。你已经告诉我们你想找到什么,但你忽略了告诉我们你需要用在"1234" 和后来的"and" 之前找到的"abc" 做什么。所以我们搜索并找到那些东西——然后呢? (另外,提示:将tac 的结果通过管道传输到您搜索的任何内容以反转输入文件的顺序)。到目前为止,您尝试过什么?
  • 我想检查该行中“and”的存在,基于存在,我必须添加我的逻辑

标签: shell


【解决方案1】:

您无法真正在一行中实现所有这些,但您可以通过运行grep -n [PATTERN] [FILENAME] 获得第一次出现的行号。

我跑了grep -n 1234 file.txt。这给了我结果:6:1234

然后我将该命令通过管道传送到cut。这给了我一个子字符串,其中只包含出现的行号。

此时,cammand 看起来像:grep -n 1234 file.txt | cut -d ':' -f 1。这给了我结果:6

现在您有了出现的行号,您可以cat 文件,将其通过管道传送到head 并指定要查看的行数。然后您可以将其发送至grep

此时我的命令看起来像:cat file.txt | head -n 6。结果是文件的前 6 行。

要验证是否存在“abc and”,您可以运行:cat file.txt | head -n 6 | grep "abc and"

如果得到结果,则表示该项目存在,否则不存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 2014-12-21
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2013-04-19
    相关资源
    最近更新 更多