Shell-Script
頭/尾的否定論點
這個問題的變體肯定在不同的地方被問過好幾次,但我試圖
M
從文件中刪除最後幾行,但沒有運氣。此問題中投票第二多的答案建議執行以下操作以刪除文件中的最後一行:
head -n -1 foo.txt > temp.txt
但是,當我在 OSX 和 Zsh 中嘗試時,我得到:
head: illegal line count -- -1
這是為什麼?如何刪除給定文件的
M
最後一行和****第一行?N
您可以使用以下命令刪除前 12 行:
tail -n +13
(這意味著從第 13 行開始列印。)
head
類似 GNUhead
支持的一些實現:head -n -12
但這不是標準的。
tail -r file | tail -n +12 | tail -r
可以在那些具有
tail -r
(另見 GNUtac
)但不是最佳的系統上工作。哪裡
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}'