Linux sed 命令
阿新 • • 發佈:2021-06-17
Linux sed 命令
Linux sed 命令是利用指令碼來處理文字檔案
sed 可以找指令碼的指令來處理,編輯文字檔案
sed 主要用來自動編輯一個或多個檔案,簡化對檔案的反覆操作,編寫程式等
# 語法 sed [-hnV][-e<script>][-f<script檔案>][文字檔案] # 引數說明 -e<script> 或 --expression=<script> 以選項中指定的script來處理輸入的文字檔案 -f<script> 或 --file=<script檔案> 以選項中指定的script檔案來處理輸入的文字檔案 -h 或 --help 顯示幫助 -n 或 --quiet 或 --silent 僅顯示script處理後的結果 -V 或 --version 顯示版本資訊 # 動作說明 a : 新增, a的後面可以接字串,這些字串 將出現在新一行(當前行的下一行) c : 取代, c的後面可以接字串,這些字串可以取代 n1,n2之間的行 d : 刪除, 因為是刪除,d後面通常不跟任何內容 i : 插入, i的後面可以接字串 , 這些字串 將出現在新一行(當前行的上一行) p : 列印, 選擇某個資料印出 s : 取代, 可以直接進行取代工作. 通常s懂可以搭配正則表示式,如 : 20s/old/new/g #### 務必以 '' 兩個單引號括住
a
# 追加行
$ sed -e 4a\newline testfile #使用sed 在第四行後新增新字串
HELLO LINUX! #testfile檔案原有的內容
Linux is a free unix-type opterating system.
This is a linux testfile!
Linux test
newline
以行為單位的新增/刪除
$ nl testfile 1 HELLO LINUX! 2 Linux is a free unix-type opterating system. 3 This is a lin # d 刪除指定的行號 $ nl testfile | sed '2,3d' 1 HELLO LINUX! 4 Linux test # 刪除 第二行 $ nl testfile | sed '2d' # 刪除第三行到最後一行 $ nl testfile | sed '3,$d' # a 追加內容第二行後 追加內容 $ nl testfile |sed '2a drink tea' 1 HELLO LINUX! 2 Linux is a free unix-type opterating system. drink tea 3 This is a linux testfile! 4 Linux test # i 插入內容第二行前 $ nl testfile |sed '2i drink tea' 1 HELLO LINUX! drink tea 2 Linux is a free unix-type opterating system. 3 This is a linux testfile! 4 Linux test # 增加兩行以上的內容 $ nl testfile | sed '2a Drink tea or ......\ > drink beer ?' 1 HELLO LINUX! 2 Linux is a free unix-type opterating system. Drink tea or ...... > drink beer ? 3 This is a linux testfile! 4 Linux test
以行為單位的替換與顯示
# c 整行取代 2-3行替換成 : no 2-3 numbe
$ nl testfile |sed '2,3c no 2-3 number'
1 HELLO LINUX!
no 2-3 number
4 Linux test
# 僅列出 指定行號的內容
$ nl testfile |sed -n '2,3p'
2 Linux is a free unix-type opterating system.
3 This is a linux testfile!
資料的搜尋並顯示
# 搜尋 有 test關鍵字的行,重複出現 # p 列印 $ nl testfile | sed '/test/p' 1 HELLO LINUX! 2 Linux is a free unix-type opterating system. 3 This is a linux testfile! 3 This is a linux testfile! 4 Linux test 4 Linux test # -n 只展示結果 $ nl testfile | sed -n '/test/p' 3 This is a linux testfile! 4 Linux test
資料的搜尋並刪除
# d 刪除 符合條件的行
$ nl testfile | sed '/test/d'
1 HELLO LINUX!
2 Linux is a free unix-type opterating system.
資料的搜尋並執行命令
# 執行後面花括號中的一組命令,每個命令之間用分號分隔,這裡把bash替換為blueshell,再輸出這行
$ nl testfile |sed -n '/test/{s/linux/Centos/;p;q}'
3 This is a Centos testfile!
資料的搜尋並替換
# sed 's/要被取代的字串/新的字串/g'
# 利用 /sbin/ifconfig 查詢 IP , 將 IP 前面的部分予以刪除
$ /sbin/ifconfig ens33 |grep 'inet'|sed 's/^.*://g'
inet 192.168.236.128 netmask 255.255.255.0 broadcast 192.168.236.255
# 刪除後續的部分
$ /sbin/ifconfig ens33 |grep 'inet'|sed 's/^.*://g' | sed 's/netmask.*$//g'
inet 192.168.236.128
多點編輯
$ nl testfile |sed -e '3,$d'
1 HELLO LINUX!
2 Linux is a free unix-type opterating system.
$ nl testfile |sed -e '3,$d' -e 's/free/fzzz/'
1 HELLO LINUX!
2 Linux is a fzzz unix-type opterating system.
# -e表示多點編輯,第一個編輯命令刪除testfile第三行到末尾的資料,第二條命令搜尋free替換為fzzz。
直接修改檔案內容(危險動作)
# 利用 sed 將 regular_express.txt 內每一行結尾若為 . 則換成 !
$ sed -i 's/\.$/\!/g' regular_express.txt
# regular_express.txt 最後一行加入 # This is a test:
$ sed -i '$a # This is a test' regular_express.txt