gpt4 book ai didi

linux - 如何在 unix 或 AWK 中执行以下 grep

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:27 24 4
gpt4 key购买 nike

我有一个类似这样的文件

开始---abcxyz

结束----efg123

引用 ----2345

松弛---- lmnop

.....……上面的格式在接下来的“Start & Slack”之间重复其他内容

我想从文件中查找“开始”“结束”“Slack”行那么我们如何在 unix 或使用 AWK 中做。

-谢谢

最佳答案

我可以用两种不同的方式阅读这个问题,要么在两个标记之间回显线条,要么只输出多种类型的线条。


如果您想要 StartEnd 之间的行(例如),您可以使用 awk一个“echo ”变量:

echo 'Start ---abcxyz
something goes here
and here
End ---- efg123
Ref ----2345
Slack---- lmnop' | awk '
/^Start / { e = 1 }
{ if (e) { print } }
/^End / { e = 0 }
'

输出是:

Start ---abcxyz
something goes here
and here
End ---- efg123

echo 变量 e 最初未设置,因此 if 语句永远不会触发。每当 awk 看到以 Start 开头的行时,它会将 echo 变量设置为 true。在这种情况下,将从该点开始回显所有行。

然后,当 awk 看到以 End 开头的行时,它会将 echo 标志设置回 false,阻止进一步的输出。

三个 awk 命令的顺序可用于决定是否也打印开始行和结束行。例如,如果您不想要它们,您可以交换第一个和第三个命令(开始和结束命令):

echo 'Start ---abcxyz
something goes here
and here
End ---- efg123
Ref ----2345
Slack---- lmnop' | awk '
/^End / { e = 0 }
{ if (e) { print } }
/^Start / { e = 1 }
'

输出是:

something goes here
and here

如果您只想要开始、结束和松弛线,grep 非常有能力做到这一点:

echo 'Start ---abcxyz
something goes here
and here
End ---- efg123
Ref ----2345
Slack---- lmnop' | egrep '^Start |^End |^Slack'

输出是:

Start ---abcxyz
End ---- efg123
Slack---- lmnop

关于linux - 如何在 unix 或 AWK 中执行以下 grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11660816/

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