如何使用 sed 交换两行?

Dav*_*vid 5 linux sed

没有人知道如何更换line a使用line b,并line bline a使用sed编辑一个文本文件?

我可以看到如何将模式空间中的一行替换为保留空间中的一行(即/^Paco/x/^Paco/g),但是如果我想取以 开头的行Paco并将其替换为Vinh以开头的行Vinh并将其替换为开头的行Paco

让我们首先假设有一行Paco和一行Vinh,并且该行Paco出现在该行之前Vinh。然后我们可以转到一般情况。

smi*_*hax 4

#!/bin/sed -f
/^Paco/ {
:notdone
  N
  s/^\(Paco[^\n]*\)\(\n\([^\n]*\n\)*\)\(Vinh[^\n]*\)$/\4\2\1/
  t
  bnotdone
}
Run Code Online (Sandbox Code Playgroud)

匹配 /^Paco/ 后,我们读入模式缓冲区,直到 s// 成功(或 EOF:模式缓冲区将按原样打印)。然后我们重新开始搜索/^Paco/。