gpt4 book ai didi

linux - sed中 'Hold space'和 'Pattern space'的概念

转载 作者:IT老高 更新时间:2023-10-28 12:30:04 26 4
gpt4 key购买 nike

我对 sed 中的两个概念感到困惑:保持空间和模式空间。有人可以帮忙解释一下吗?

这是手册的一个片段:

h H    Copy/append pattern space to hold space.
g G Copy/append hold space to pattern space.

n N Read/append the next line of input into the pattern space.

这六个命令真的让我很困惑。

最佳答案

当 sed 逐行读取文件时,当前已读取的行被插入到 pattern 缓冲区(模式空间)中。模式缓冲区就像临时缓冲区,即存储当前信息的暂存器。当您告诉 sed 打印时,它会打印模式缓冲区。

保持缓冲区/保持空间就像一个长期存储,这样您就可以捕获一些东西,存储它并在 sed 处理另一行时重新使用它。您不直接处理保持空间,而是需要将其复制或附加到模式空间,如果您想对其进行操作。例如,打印命令 p 只打印模式空间。同样,s 对模式空间进行操作。

这是一个例子:

sed -n '1!G;h;$p'

(-n 选项禁止自动打印行)

这里有三个命令:1!Gh$p1!G 有一个地址,1(第一行),但 ! 表示该命令将在任何地方执行 在第一行。另一方面,$p 只会在最后一行执行。那么会发生什么:

  1. 第一行被读取并自动插入到模式空间中
  2. 在第一行,第一个命令没有被执行; h 将第一行复制到 hold 空间中。
  3. 现在第二行替换了模式空间中的任何内容
  4. 在第二行,首先我们执行G,将保持缓冲区的内容附加到模式缓冲区,并用换行符分隔。模式空间现在包含第二行、换行符和第一行。
  5. 然后,h 命令将模式缓冲区的连接内容插入到保存空间中,该空间现在保存反转的第 2 行和第 1 行。
  6. 我们继续进行第三行 - 转到上面的第 (3) 点。

最后,在读完最后一行并且将保持空间(以相反的顺序包含所有前面的行)附加到模式空间之后,模式空间将使用 p 打印。正如你所猜到的,上面的代码和 tac 命令完全一样——反向打印文件。

关于linux - sed中 'Hold space'和 'Pattern space'的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12833714/

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