我需要移动文本文件的最后4行并将它们移动到文本文件的第二行。
我假设使用了尾巴和sed,但到目前为止我没有太多运气。
答案 0 :(得分:2)
如果我假设正确,ed
可以处理您的任务:
seq 10 > file
ed file <<'COMMANDS'
$-3,$m1
w
q
COMMANDS
cat file
1
7
8
9
10
2
3
4
5
6
第7,8,9,10行已移至第2行
$-3,$m1
表示,对于从“$ -3”(最后一行前3行)到“$”(最后一行,在第一行下方移动它们(“m”)的行数范围( “1”)
请注意,引用了heredoc,因此shell不会尝试将字符串$-
和$m1
解释为变量
如果您不想实际修改文件,而是打印到stdout:
ed -s file <<'COMMANDS'
$-3,$m1
%p
Q
COMMANDS
答案 1 :(得分:2)
这是head
和tail
解决方案。让我们从与Glenn Jackman相同的示例文件开始:
$ seq 10 >file
应用以下命令:
$ head -n1 file ; tail -n4 file; tail -n+2 file | head -n-4
1
7
8
9
10
2
3
4
5
6
说明:
head -n1 file
打印第一行
tail -n4 file
打印最后四行
tail -n+2 file | head -n-4
打印从第2行开始到第4行到最后一行之前的行。
答案 2 :(得分:0)
以下是awk
解决方案:
seq 10 > file
awk '{a[NR]=$0} END {for (i=1;i<=NR-4;i++) if (i==2) {for (j=NR-3;j<=NR;j++) print a[j];print a[i]} else print a[i]}' file
1
7
8
9
10
2
3
4
5
6