在 Linux 命令行中刪除文件中的某一行
我們大家都知道,在 vim 中刪除文件中的某幾行很簡單,只需要按下 dd 鍵即可。那么,在不主動打開文件的情況下,通過命令行怎樣刪除文件中特定的某行呢?
使用像 rm 這樣的命令,會刪除整個文件,但我們并不希望這樣做。使用 vim 或者 nano 這樣的文本編輯器,并不適用于 bash 腳本的自動化。
合適的方案,是使用 sed 命令,它可以在 shell 腳本中使用。
我們今天將介紹幾種使用的場景和例子。
注意,我們介紹的例子會修改原始文件,所以如果大家在平時使用或者練習的時候,最好先做好備份。
從文件中刪除某一行
假如我們要刪除文件中的第7行,那么可以這樣使用 sed 命令:
我們來解釋一下上述命令:
- -i:該選項啟用在位編輯(in-place editing)。默認情況下,sed 只顯示輸出,使用 -i 選項,它修改實際文件,但是不在顯示其中顯示;
- 7d:這里 7 是行號,d 指刪除該行;
- filename:要修改的文件,如果文件位于其他目錄中,可以提供絕對或相對路徑。
我們舉個實際的例子,假如有一個名為 tiap.txt 的文件,其內容為:
刪除第4行:
上述命令將會刪除 Giant's Bread 這一行,如下為結果:
接下來,我們刪除第一行:
注意:如果希望在不修改文件本身的情況下查看操作結果,請不要使用 -i 選項。
使用 sed 刪除最后一行
上文我們介紹了刪除特定的某一行,那么怎樣刪除最后一行呢?
有一種方法是使用 wc 命令來獲取文件中的總行數,然后結合 sed 使用。不過,sed 提供了一個專門的方法來刪除文件的最后一行,所以我們不需要再獲取文件的總行數了。
刪除多行
與前面介紹的類似,還可以刪除文件中的多行。比如,我們要刪除文件中的第11行至第15行,那么可以這樣:
上述命令會從文件中刪除包括第11行到第15行的內容。
刪除包含某字符串的行
使用 sed 命令還可以刪除包含給定字符串或與特定模式匹配的所有行。
下面的命令將刪除包含單詞“string”的所有行:
注意,上述字符串是區分大小寫的。此外,還可以使用正則表達式來代替字符串。
刪除以某個單詞開頭的行
如果要刪除以特定單詞或字母開頭的所有行,只需提供如下正則表達式:
刪除所有空行
我們今天介紹的最后一個例子,是刪除文件中所有的空白行:
關于 sed 命令,它的使用方法還有很多,大家有興趣可以查看一下 man 手冊。后續我們也會再單獨介紹一下。
以上就是本次分享全部內容,歡迎討論。