使用wc獲取檔案的行數,並數出開始刪除的行號,然後使用sed進行刪除。
sed刪除基本命令:
sed -i "$,$d
" filename
其中-i引數是表示直接修改讀取的檔案內容,而不是輸出到終端。
$,$部分對應sed的位址匹配,都是整數,是具體的行號,表示匹配n1到n2行。
d表示刪除命令。
具體sed的教程可以參考:sed原理及使用
新建指令碼test.sh並增加執行許可權:
#!/bin/bashset -x
line=$1
# 新建測試檔案
cat > cc
<3456
7eof
echo
"before deleting
"cat
cc# 計算需要刪除的起始行:檔案總行數-需要刪除的行數+1
count=$(wc -l cc | awk''
)# 驗證行數是否正確
if [ $line -gt $count ]
then
echo
"too much lines
"exit
fifrom=$(($count-$line+1
))echo
"all lines:$count, you want delete:$line, from:$from
"sed -i "
$,\$d"cc
echo
"after deleting:
"cat
cc
驗證:
./test.sh3輸出:
+ line=3
+ cat
+ echo
'before deleting
'before deleting
+ catcc1
2345
67++ wc -l cc
++ awk''
+ count=7
+ '[
'3 -gt 7']
'+ from=5
+ echo
'all lines:7, you want delete:3, from:5
'all lines:
7, you want delete:3, from:5
+ sed -i '
5,$d'cc
+ echo
'after deleting:
'after deleting:
+ catcc1
234
開啟了除錯,可以看出具體的輸出情況,最後正常刪除了最後三行,如果刪除的行數超過檔案的行數則不刪除:
./test.sh30
輸出:
+ line=30+ cat
+ echo
'before deleting
'before deleting
+ catcc1
2345
67++ wc -l cc
++ awk''
+ count=7
+ '[
'30 -gt 7']
'+ echo
'too much lines
'too much lines
+ exit
linux 刪除檔案最後幾行
root server a sed n a.txt root server sed a 3 1 d a.txt 或者使用上面兩條命令。刪除的是倒數3行的。如果刪除倒數300 那就把3改為300 就可以了。root server cat aa.txt aaaa bbbb cccc dddd eeee ...
cut最後幾位 shell shell指令碼基本操作
1 指令碼格式 指令碼以 bin bash開頭 指定解析器 2.變數 n 功能描述 n為數字,0代表該指令碼名稱,1 9代表第一到第九個引數,十以上的引數,十以上的引數需要用大括號包含,如 功能描述 獲取所有輸入引數個數,常用於迴圈 功能描述 這個變數代表命令列中所有的引數,把所有的引數看成乙個整體...
linux shell 顯示檔案最後幾行
tail n 20 filename 說明 顯示filename最後20行。linux下tail命令的使用方法。linux tail命令用途是依照要求將指定的檔案的最後部分輸出到標準裝置,通常是終端,通俗講來,就是把某個檔案檔案的最後幾行顯示到終端上,假設該檔案有更新,tail會自己主動重新整理,確...