答案1
您可以使用以下命令删除前 12 行:
tail -n +13
(即从第13行开始打印。)
head
GNU支持的一些实现head
:
head -n -12
但这不是标准的。
tail -r file | tail -n +13 | tail -r
可以在那些具有tail -r
(另请参见 GNU tac
)但不是最优的系统上运行。
n
1 在哪里:
sed '$d' file
您还可以这样做:
sed '$d' file | sed '$d'
删除 2 行,但这不是最佳选择。
你可以做:
sed -ne :1 -e 'N;1,12b1' -e 'P;D'
但请注意,这不适用于较大的值n与一些sed
实现。
和awk
:
awk -v n=12 'NR>n{print line[NR%n]};{line[NR%n]=$0}'
m
要从开头和n
结尾删除行:
awk -v m=6 -v n=12 'NR<=m{next};NR>n+m{print line[NR%n]};{line[NR%n]=$0}'
答案2
您可以使用以下方法删除前 N 行和后 M 行。
使用N=5
,M=7
和 文件test.txt
:
sed -n -e "6,$(($(wc -l < test.txt) - 7))p" test.txt
该命令打印从 N+1 到 LastLine-M 的所有行。
另一种选择是使用 python:
python -c 'import sys;print "".join(sys.stdin.readlines()[5:-7]),' < test.txt
蟒蛇3:
python -c 'import sys;print("".join(sys.stdin.readlines()[5:-7]))' < test.txt
要覆盖现有文件:
python -c 'import sys;print("".join(sys.stdin.readlines()[5:-7]))' < test.txt > temp.txt && mv temp.txt test.txt
答案3
M
您可以使用以下命令从文件中删除最后一行(此处 M=100):
head -$(($(wc -l < foo.txt) - 100)) foo.txt > temp.txt