gpt4 book ai didi

awk - grep-在之前打印行,不打印匹配项

转载 作者:行者123 更新时间:2023-12-04 05:18:36 25 4
gpt4 key购买 nike

如何轻松地在比赛上方打印行并跳过比赛本身? grep -A-B-o opt无法解决它。也许一些awk魔术?

例如:

$ cat foo.txt
bar
foo
baz
foo

$ cat foo.txt | grep foo-SOMETHING
bar
baz

编辑
  • 如果第2行和第3行具有“foo”,则应打印第1行和第2行(尽管我在这里不是很严格)

    附加功能:考虑示例:
    bar
    foo
    baz
    foo
    foo

    理想情况下,这应该返回
    bar
    baz
    foo

  • 最佳答案

    awk '!/foo/ { line = $0 }
    /foo/ { print line }' foo.txt

    第一个子句将每个非foo行保存在变量中。当该行与 foo匹配时,第二个子句将打印最近保存的行。

    这也可以工作(并处理您连续有两行 foo行的情况):
    awk '/foo/ {print line}
    {line = $0}' foo.txt

    使用 grep,您可以执行以下操作:
    grep -B 1 foo foo.txt | grep -vE 'foo|^--$'

    第二个命令过滤掉 foo行和匹配块之间打印的分隔线。

    关于awk - grep-在之前打印行,不打印匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17943738/

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