使用bash指令碼刪除檔案最後幾行

2022-03-26 19:56:22 字數 1708 閱讀 4044

使用wc獲取檔案的行數,並數出開始刪除的行號,然後使用sed進行刪除。

sed刪除基本命令:

sed -i "

$,$d

" filename

其中-i引數是表示直接修改讀取的檔案內容,而不是輸出到終端。

$,$部分對應sed的位址匹配,都是整數,是具體的行號,表示匹配n1到n2行。

d表示刪除命令。

具體sed的教程可以參考:sed原理及使用

新建指令碼test.sh並增加執行許可權:

#!/bin/bash

set -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.sh

3輸出:

+ 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.sh

30

輸出:
+ 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會自己主動重新整理,確...