Linux文字處理命令sed基本使用示例
最近在專案中遇到了對配置檔案做區域性修改的需求,用到了Linux下的文字操作神器sed,本篇根據酷殼網《sed 簡明教程》(http://coolshell.cn/articles/9104.html)來學習和記錄一下sed命令的基本使用。
sed-stream editor
首先來了解一下sed的常見引數:
用法: sed [-nefri] [動作]
選項:
-n : 使用安靜(silent)模式。在一般sed的用法中,所有來自STDIN的資料一般都會被列出到螢幕上。但如果加上-n引數後,則只有經過sed特殊處理的那一行(或者操作)才會被列出來。
-e : 直接在命令列模式上進行sed的動作編輯。
-f : 直接將sed的動作寫在一個檔案內,-f filename則可以執行filename內的sed動作。
-r : sed的動作支援的是擴充套件型正規表示式的語法(預設是基礎正規表示式語法)。
-i : 直接修改讀取的檔案內容,而不是由螢幕輸出。
動作說明: [n1[,n2]]function
n1, n2 :不一定會存在,一般代表“選擇進行動作的行數”,舉例來說,如果我的動作是需要在10到20行之間進行的,則“10,20[動作行為]”。
function有以下這些引數:
a :新增,a的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)
c :替換,c的後面可以接字串,這些字串可以替換n1,n2之間的行
d :刪除,因為是刪除,所以d後面通常不接任何引數
i :插入,i的後面可以接字串,而這些字串會在新的一行出現(目前的上一行)
p :列印,也就是將某個選擇的資料列印出來。通常p會與引數sed -n一起執行
s :替換,可以直接進行替換的工作。通常這個s的動作可以搭配正規表示法,例如 1,20s/old/new/g
1.用s命令替換
我們後面的操作均用以下這段文字做示例:
示例1:將文字中的my都替換為your
命令:sed "s/my/your/g" test.txt
說明:s表示替換命令,/my/表示匹配my,/your/表示把匹配替換成your,/g 表示全部替換,不加/g則只會替換每行的第一個匹配
一般用法:sed "s/要被替換的字串/新的字串/g" filename
執行後,效果如下:
不加/g效果如下:
需要注意的是:上面的sed並沒有改變檔案的內容,只是把處理過後的內容輸出,如果需要寫回檔案,可以使用重定向,如:
sed "s/my/your/g" test.txt > new_test.txt
或者使用 -i 引數直接修改檔案內容:
sed -i "s/my/your/g" test.txt
還要注意的是:命令中我們可以用單引號或雙引號,如果使用單引號,那麼就沒辦法通過\’這樣來轉義,而在雙引號內可以用\”來轉義。
示例2:我們可以利用正規表示式來完成一些操作,正規表示式在文字的檢索和替換方面作用巨大,如:
在每一行開頭加點東西:sed 's/^/#/g' test.txt
(^ 匹配輸入字串的開始位置)
在每一行末尾加點東西:sed 's/$/.../g' test.txt
($ 匹配輸入字串的結束位置)
示例3:我們還可以指定需要替換的內容,如:
將第3行的my替換為your:sed "3s/my/your/g" test.txt
將第2到4行的my替換為your:sed "2,4s/my/your/g" test.txt
將每一行的第1個小寫‘s’替換為大寫‘S’:sed 's/s/S/1' test.txt
將每一行的第2個小寫‘s’替換為大寫‘S’:sed 's/s/S/2' test.txt
將每一行的第3個及以後的小寫‘s’替換為大寫‘S’:sed 's/s/S/3g' test.txt
示例4:我們可以使用&來當做被匹配的變數,然後在被匹配的變數左右加點東西,如下:
給文字中的‘my’的左右都分別加上左、右中括號:sed 's/my/[&]/g' test.txt
2.多個匹配和圓括號匹配
有時候我們需要一次替換多個模式,比如:
示例5:第一個模式把第一行到第三行的my替換成your,第二個則把第3行以後的This替換成了That
我們可以這樣寫:
sed '1,3s/my/your/g; 3,$s/This/That/g' test.txt
等價於
sed -e '1,3s/my/your/g' -e '3,$s/This/That/g' test.txt
(用到了-e:在sed命令傳遞多個編輯命令式時,要用到-e)
示例6:圓括號匹配即正規表示式中的分組,圓括號括起來的正規表示式所匹配的字串可以當成變數來使用,用\1、\2…來表示
命令:sed 's/This is my \([^,]*\),.*is \(.*\)/\1:\2/g' test.txt
說明:該行命令的作用是將 This is my\ ([^,]*\),.*is\ (.*\) 替換為 \1:\2。
正規表示式(去掉了轉義字元)為This is my ([^,]*),.*is (.*),第一個匹配指匹配讀到以逗號作為開頭的地方的前面的資訊,第二個匹配是指匹配任意數量的不包含換行的字元。一個匹配為:This is my (cat), ……is (betty),\1就是cat,\2就是betty。
3.sed的命令
N命令-把下一行的內容納入當成緩衝區做匹配
示例7:sed 'N;s/my/your/' test.txt
說明:本示例會把原文字中的偶數行納入奇數行一起匹配(類似於將下一行的內容合併在一起進行匹配),且沒有加/g,只匹配且替換一次
我們可以看到結果如下:
i命令-插入
在第1行前插入一行(insert):sed "1 i This is my monkey, my monkey's name is wukong" test.txt
a命令-追加
在最後一行後追加一行(append):sed "$ a This is my monkey, my monkey's name is wukong" test.txt
運用匹配來新增文字。
匹配到/fish/後就追加一行:sed "/fish/a This is my monkey, my monkey's name is wukong" test.txt
對每一行都追加一行......(因為每一行都能匹配到/my/):sed "/my/a ......" test.txt
c命令-替換匹配行
將第二行的內容替換:sed "2 c This is my monkey, my monkey's name is wukong" test.txt
將匹配到fish那一行的內容替換(fish為第三行):sed "/fish/c This is my monkey, my monkey's name is wukong" test.txt
d命令-刪除匹配行
刪除第二行(第二行為dog):sed '2d' test.txt
刪除匹配到fish的行:sed '/fish/d' test.txt
刪除第2行到最後一行:sed '2,$d' test.txt
p命令-列印
我們可以把p命令當作類似grep的命令。
我們來看這條命令:sed '/fish/p' test.txt
它的作用是匹配fish並輸出,但是為什麼fish那行會輸出兩遍呢,這是因為sed處理時會把處理的資訊輸出,我們加上-n選項就不會了:
從第一行列印到匹配fish成功的那一行:sed -n '1,/fish/p' test.txt
相關文章
- Linux中文字處理命令sed的使用示例分享Linux
- linux下的文字處理命令sedLinux
- 命令列與Shell -> 文字處理命令之sed命令列
- Linux:管道命令與文字處理三劍客(grep、sed、awk)Linux
- 文字處理的金剛鑽 —— sed (GNU/sed)
- Linux文字處理命令Linux
- 在Linux中,如何使用awk和sed進行文字處理?Linux
- 文字處理流編輯器sed命令用法大全
- Linux文字處理命令(轉)Linux
- sed命令簡單使用示例分享
- 幾個常用的文字處理shell 命令:find、grep、sort、uniq、sed、awk
- Linux基礎命令---文字編輯sedLinux
- Linux 文字處理工具(grep sed awk )Linux
- LINUX學習(五)Linux文字處理命令Linux
- sed 命令詳解及示例
- 《Linux下sed命令的使用》Linux
- Linux中sed命令b選項遮蔽指定的處理區域Linux
- 10 文字分析處理命令
- Linux Shell程式設計(23)——文字處理命令Linux程式設計
- 透過6個示例帶你掌握Linux sed命令!Linux
- 使用 Linux/Unix 進行文字處理Linux
- linux sed 命令Linux
- linux sed命令Linux
- LINUX命令-sedLinux
- Python文字預處理:步驟、使用工具及示例Python
- Linux命令篇 - sed 命令Linux
- linux三劍客(grep、sed、awk)基本使用Linux
- Linux sed命令用法Linux
- linux之 sed命令Linux
- 程式設計小技巧之 Linux 文字處理命令(二)程式設計Linux
- Linux檔案處理三劍客之sedLinux
- Linux文字處理技巧分享Linux
- Linux中的15個基本‘ls’命令示例Linux
- 【Linux學習教程】Linux中Sed命令如何使用?Linux
- LINUX系統 利用AWK命令處理文字資料過程Linux
- 幾個與文字處理相關的Linux命令總結Linux
- Linux系列開坑記(三)-流處理器sedLinux
- Linux sed 命令詳解Linux