复制行并使用 sed 或 awk 将其插入到新位置

Sen*_*nha 7 sed awk text-processing

我有这个文件:

a
b
c
d
e
f
Run Code Online (Sandbox Code Playgroud)

我希望将最后一行复制到第一行之前,所以我会得到以下结果:

f
a
b
c
d
e
f
Run Code Online (Sandbox Code Playgroud)

我怎样才能在sed或 中做到这一点awk

Kus*_*nda 10

ed

$ printf '$t0\n,p\n' | ed -s file
f
a
b
c
d
e
f
Run Code Online (Sandbox Code Playgroud)

中的t命令ed将一行从寻址行(此处$为最后一行)传输/复制到由其参数寻址的行之后(此处0,即在第一行之前插入)。该,p命令打印编辑缓冲区的内容(将其更改w为将结果写回文件)。


dar*_*urf 9

或者就这样,没有 sed 或其他

tail -1 list && cat list
Run Code Online (Sandbox Code Playgroud)


Phi*_*pos 9

sed:

sed 'H;1h;$!d;G' file.txt
Run Code Online (Sandbox Code Playgroud)

所有行都收集在保持空间中,然后附加到最后一行:

  • H将当前行附加到保持空间。不幸的是,这将以换行符开始保留空间,因此1h对于第一行,保留空间将被该行覆盖,而不会在换行符之前
  • $!d表示如果这不是 ( !) 最后一行 ( $),则d删除该行,因为我们还不想打印它
  • G仅对最后一行执行,因为对于其他行d停止处理。现在,我们在保留空间中收集的所有行(从头到尾)都使用G命令附加到当前(最后)行,并且所有内容都在脚本末尾打印。


αғs*_*нιη 8

另一种sed选择是:

sed '$!d; r infile' infile
Run Code Online (Sandbox Code Playgroud)

删除除最后一行之外的所有行,下一次读取并输出整个文件。