gpt4 book ai didi

bash - grep (awk) 从 A 到第一个空行的文件

转载 作者:行者123 更新时间:2023-11-29 09:01:33 27 4
gpt4 key购买 nike

我需要从包含 Pattern A 的行到第一个空行进行 grep 文件。我使用了 awk 但我不知道如何编写这个空行。

cat ${file} | awk '/Pattern A/,/Pattern B/'

最佳答案

sed 可能是最好的:

sed -n '/PATTERN/,/^$/p' file

为了避免打印空行:

sed -n '/PATTERN/,/^$/{/^$/d; p}' file

甚至更好 - thanks jthill! :

sed -n '/PATTERN/,/^$/{/./p}' file

如果 PATTERN 出现不止一次,上述解决方案将提供比需要更多的输出。为此,最好在找到空行后退出,如jaypal's answer suggests。 :

sed -n '/PATTERN/,/^$/{/^$/q; p}' file

说明

  • ^$ 匹配空行,因为 ^ 代表行首,$ 代表行尾。因此,^$ 表示:在行首和行尾之间不包含任何内容的行。
  • /PATTERN/,/^$/{/^$/d; p
    • /PATTERN/,/^$/ 匹配从 PATTERN 到空行的行。
    • {/^$/d; p} 删除 (d) ^$ 格式的行,打印 (p) 其余部分。
  • {/./p} 只打印那些至少有一个字符的行。

通过 awk,您可以使用:

awk '!NF{f=0} /PATTERN/ {f=1} f' file

sed 相同,如果它有很多行带有 PATTERN,它将失败。为此,让我们在找到空行后退出:

awk 'f && !NF{exit} /PATTERN/ {f=1} f' file

说明

  • !NF{f=0} 如果没有字段(即行为空),取消设置标志 f
  • /PATTERN/{f=1} 如果找到 PATTERN,则设置标志 f
  • f 如果设置了标志 f,则为 True,因此它执行默认的 awk 行为:打印该行。

测试

$ cat a
aa
bb
hello
aaaaaa
bbb

ttt

$ awk '!NF{f=0} /hello/ {f=1} f' a
hello
aaaaaa
bbb
$ sed -n '/hello/,/^$/{/./p}' a
hello
aaaaaa
bbb

关于bash - grep (awk) 从 A 到第一个空行的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23831767/

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