gpt4 book ai didi

bash - 打印最后匹配的行

转载 作者:行者123 更新时间:2023-12-02 08:42:27 25 4
gpt4 key购买 nike

使用 sed,我想打印文件的最后匹配行。我遇到了

sed: return last occurrence match until end of file

但是,我只想要匹配的行本身,而不是任何范围的行。使用那个页面我实际上想出了一个工作命令

$ sed '/out_time=/h; $!d; x' progress.txt
out_time=00:00:07.720000

问题是为什么这行得通,或者换句话说这个命令中发生了什么。如果存在的话,还包括一个更简单的 sed 命令。

最佳答案

很简单,这是在每一行(循环)上运行的三个独立命令:

  • h 命令用包含 out_time= 的每一行替换当前保持缓冲区。
  • $!d 删除所有不是最后一行的行并重新开始下一个循环。
  • x 命令交换保持和模式缓冲区。

效果是最后的 out_time= 行被放置在保持缓冲区中,并且唯一通过 $!d 过滤器逃逸的行(最后一行文件)在打印之前与该保持缓冲区交换。

按照以下几行将其视为一个程序:

for every line in file:
if line contains "out_time=":
holdbuff = line
if line is not last line of file:
continue for loop
swap line and holdbuff
print line

当然,如果您拥有适合这项工作的正确工具,则可以避免整个折磨过程:

grep 'out_time=' progress.txt | tail -1

关于bash - 打印最后匹配的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15353962/

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