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
为将结果写回文件)。
纯sed
:
sed 'H;1h;$!d;G' file.txt
Run Code Online (Sandbox Code Playgroud)
所有行都收集在保持空间中,然后附加到最后一行:
H
将当前行附加到保持空间。不幸的是,这将以换行符开始保留空间,因此1h
对于第一行,保留空间将被该行覆盖,而不会在换行符之前$!d
表示如果这不是 ( !
) 最后一行 ( $
),则d
删除该行,因为我们还不想打印它G
仅对最后一行执行,因为对于其他行d
停止处理。现在,我们在保留空间中收集的所有行(从头到尾)都使用G
命令附加到当前(最后)行,并且所有内容都在脚本末尾打印。另一种sed
选择是:
sed '$!d; r infile' infile
Run Code Online (Sandbox Code Playgroud)
删除除最后一行之外的所有行,下一次读取并输出整个文件。