sed/awk将粘贴片段从一个地方复制到同一文件中的其他位置

Sat*_*ish 1 regex linux awk sed

如何使用sed/awk工具复制一些片段并粘贴到同一文件中?

示例:文件名foo.txt具有以下文本我想要复制并粘贴到同一文本下面

ABC
DEF
GHI
JKL
MNO
PQR
Run Code Online (Sandbox Code Playgroud)

最终输出就像.

    ABC
    DEF
    GHI
    JKL
    MNO
    PQR

    ABC
    DEF
    GHI
    JKL
    MNO
    PQR
Run Code Online (Sandbox Code Playgroud)

buf*_*ufh 6

OP要求sed,所以在这里!

可能有很多方法可以实现它,但这是我所知道的:

sed 'H;$G' foo.txt
Run Code Online (Sandbox Code Playgroud)
  • H:将当前文件附加到保持缓冲区
  • ;:分开两个表达式
  • $:文件结束时
  • G:打印保持缓冲区

可是等等!还有更多!

永远不要忘记那ed是标准文本编辑器(花了我一些时间来记住如何使用它,它不是我必须说的明亮).

例如,假设它位于一个名为的文件中foo.ed(您可以在交互式会话中执行相同操作):

$a

.
,t$
$d
wq
Run Code Online (Sandbox Code Playgroud)

然后用它:

ed foo.txt < foo.ed
Run Code Online (Sandbox Code Playgroud)

单行不可读的基础:

ed foo.txt <<< $'$a\n\n.\n,t$\n$d\nwq'
Run Code Online (Sandbox Code Playgroud)

翻译:

  • $a:在文件的末尾插入所有内容(此处有一个新行),直到单点 .
  • ,t$:将整个文件内容复制到最后
  • $d:删除最后一行,因为我不记得如何复制到文件结尾之前的行!@#
  • wq:写和退出

参考文献: