Shell-Script

頭/尾的否定論點

  • March 27, 2022

這個問題的變體肯定在不同的地方被問過好幾次,但我試圖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(另見 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}'

引用自:https://unix.stackexchange.com/questions/169079