Ame*_*ina 16 osx options shell-script tail head
这个问题的变体肯定在不同的地方被问过几次,但我试图M从文件中删除最后一行而没有运气。
在第二个最投票的答案在这个问题建议做以下摆脱在文件的最后一行:
head -n -1 foo.txt > temp.txt
Run Code Online (Sandbox Code Playgroud)
但是,当我在 OSX & Zsh 中尝试时,我得到:
head: illegal line count -- -1
Run Code Online (Sandbox Code Playgroud)
这是为什么?我如何删除M 最后一个行和在第一个 N给定文件的行?
Sté*_*las 23
您可以使用以下命令删除前 12 行:
tail -n +13
Run Code Online (Sandbox Code Playgroud)
(这意味着从第 13 行开始打印。)
一些head类似 GNUhead支持的实现:
head -n -12
Run Code Online (Sandbox Code Playgroud)
但这不是标准的。
tail -r file | tail -n +12 | tail -r
Run Code Online (Sandbox Code Playgroud)
将适用于那些具有tail -r(另请参见 GNU tac)但次优的系统。
哪里n是 1:
sed '$d' file
Run Code Online (Sandbox Code Playgroud)
你也可以这样做:
sed '$d' file | sed '$d'
Run Code Online (Sandbox Code Playgroud)
删除 2 行,但这不是最佳选择。
你可以做:
sed -ne :1 -e 'N;1,12b1' -e 'P;D'
Run Code Online (Sandbox Code Playgroud)
但请注意,在某些实现中,这不适用于较大的n值sed。
与awk:
awk -v n=12 'NR>n{print line[NR%n]};{line[NR%n]=$0}'
Run Code Online (Sandbox Code Playgroud)
m从开头和n结尾删除行:
awk -v m=6 -v n=12 'NR<=m{next};NR>n+m{print line[NR%n]};{line[NR%n]=$0}'
Run Code Online (Sandbox Code Playgroud)