答案 0 :(得分:2)
答案 1 :(得分:1)
你可以从sed(1)切换到ed(1),命令大致相同。在这种情况下,命令 是相同的,除了对地址范围没有限制。
$ cat > fl7.ed
ed - $1 << \eof
1,7s/$/ (one of the first seven lines)/
$-6,$s/$/ (one of the last seven lines)/
w
q
eof
$ sh fl7.ed yourfile
答案 2 :(得分:0)
perl -lne 'END{print join$\,@a,"-",@b}push@a,$_ if@a<6;push@b,$_;shift@b if@b>7'
在END{}
区块,你可以做任何必要的事情; @a
包含前6个,@b
最后7行请求。
答案 3 :(得分:0)
这应该适合你:
sed '1{N;N;N;N;N};N;$s/foo/bar/g;P;D' inputfile
说明:
1{N;N;N;N;N}
- 当读取第一行时,用另外五行加载模式空间(此时总共为6行)N
- 追加另一行$s/foo/bar/g
- 当读取最后一行时,对模式空间的整个内容(文件的最后七行)执行一些操作。操作可能比此处显示的更复杂P
- 在模式空间的第一个换行符之前打印测试D
- 删除刚刚打印的文本并循环到脚本的开头(“追加另一行”步骤 - 跳过第一条指令,因为它只适用于文件的第一行)答案 4 :(得分:0)
这可能对您有用:
sed ':a;1,6{$!N;ba};${s/foo/bar/g;q};N;D' file
说明:
:a
1,6{$!N;ba}
${s/foo/bar/g;q}
N
D