Linux文本三劍客---sed
sed 是什么?
sed 是一種支持正則運算式的非互動式流編輯器,stream editor — 這個編輯器的流代表的是文本流,sed 可以用來修改和替換文本的內容,理解為一個文本的加工工廠,作業方式是從第一行開始一行一行對需要處理的資料進行加工,
sed 常用的方法
| -i | 可以對源檔案的內容進行修改 – 這個用法比較重要 |
|---|---|
| -n | 只顯示匹配處理的行,沒有-n就會輸出所有的內容 |
| -r | 支持擴展正則運算式 |
| -f | 從腳本檔案中讀取命令并執行 |
| -e | 執行多個編輯命令( 可以用 ; 代替 ) |
sed 常用編輯命令和方法的組合總結
p: print 列印匹配行
sed -n '3,7p' 檔案名 # 輸出檔案 3 到 7 行的內容
sed -n '1p;3p;5p' 檔案名 # 輸出檔案第 1、3、5 行的內容
sed -n '1,$p' 檔案名 # 輸出檔案 1 到 最后一行
sed -n '2,+2p' 檔案名 # 從第二行開始,往下再來兩行,也就是第二行到第四行
sed -n '5,100!p' 檔案名 # 不輸出 5 到 100 行,這里 !p 就是取反的意思
sed -n '1~2p' 檔案名 # 步長命令,從 1 開始,每次加 2 輸出,這里也就是輸出奇數行的意思
sed -n '/bash/p' 檔案名 # 能輸出含有 bash 的行
這個功能就是sed的查找功能了 用 egrep bash 或者 awk '/bash/' 也能實作同樣功能
要記住,一般 p 是會同 n 一起使用的,n 和 p 是黃金搭檔
d: delete 洗掉指定行
sed '3,5d' 檔案名 # 洗掉 3-5 行
sed '/2/d' 檔案名 # 洗掉包含數字 2 的行
sed 'etc3/!d' 檔案名 # 出了etc3 的行 其他的全部洗掉 同樣 !d 是取反的意思
這里要特別注意,-n 后面不能使用編輯命令 d , 因為東西被洗掉了之后是顯示不出來的!
a: append 在匹配行后面追加S
sed '1a ameame' 檔案名 # 在第一行后面追加 ameame 的內容
然后需要注意的是 這個追加是另起一行進行追加
s: substitute 字串替換 核心功能
sed 's/文本1/文本2/' filename # 只會將每行第一個文本1替換成文本2 只會替換每行的第一個!!!
sed 's/文本1/文本2/2' # filename 把每一行的第二個文本1替換成文本2
sed 's/文本1/文本2/g' filename # 會將每行所有的文本1替換成文本2
sed 's/文本1/文本2/2p' filename # 會將每一行從第二個開始 后面的所有文本1改換成文本2 簡單說為就是不替換第一個
sed '/^#/ s/文本1/文本2/' filename # 將檔案中以 # 開頭的行里面的第一個文本1改換成文本2
\n 換行
\t tab
\s 空白 這個sed不支持 只能用上面兩個
sed -n '2,10 s/^/#/' filename # 在檔案的第二行到第十行在開頭加上# 把它注釋掉
sed -i '/文本1/ s/文本2/文本三/' filename # 把檔案有文本1的行里面把文本二的內容替換成文本三
w: write 將文本寫入 這個功能不厲害 少用
sed '/^#/!w xxx.txt' filename # 將目標檔案的非#號開頭的內容寫進xxx.txt檔案中```
r: read 將檔案的內容讀入 有這么回事 不經常用
c: 整行替換
sed -i '1c xxxxxx' filename 將檔案第一行的內容改成xxxxxx
sed -i '/^#Port/c Port 2233' sshd_config
# 將#Port開頭的那一行的內容改成 Port 2233 在sshd_config中進行改動
i: insert 在匹配行前面插入
sed '1i qqqqqq' filename
# 在第一行前面追加qqqqqq 這個追加也是另起一行 在目標行的前面追加
補充一下 sed 標簽的用法
echo aa bb cc | sed -r 's/([a-z]+) ([a-z]+) ([a-z]+)/\3 \2 \1 /'
# 輸出結果為: cc bb aa 就是后面對輸出內容進行標號排序
后續還有Linux文本三劍客中的其他兩個 – grep 和 awk
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/278966.html
標籤:其他
上一篇:IPv6實驗配置步驟
下一篇:外部網關協議----BGP及實驗
