一、概念說明
官方概念說明:
stream editor for filtering and transforming text
字符流過濾編輯和文本字符流轉換工具
Linux sed 命令是利用腳本來處理文本檔案,
sed 可依照腳本的指令來處理、編輯文本檔案,
Sed 主要用來自動編輯一個或多個檔案、簡化對檔案的反復操作、撰寫轉換程式等,
二、sed功能作用說明
-
處理檔案資訊
- 文本檔案資訊(小檔案)
- 日志檔案資訊
- 組態檔資訊
-
處理檔案方式
- 增加資訊
- 洗掉資訊
- 修改資訊
- 查找資訊
三、sed語法原理
3.1 命令語法格式
標準格式:
sed [選項] [sed指令] [檔案資訊]
sed [引數] '處理規則' [操作物件]
...
| 相關引數 | 引數說明 |
|---|---|
| -e | 允許多項編輯 |
| -n | 取消默認輸出 |
| -i | 就地編輯 |
| -r | 支持拓展正則 |
| -f | 指定sed匹配規則腳本 |
舉例說明:
sed -i 's#oldboy#oldgirl#g' oldboy.txt
命令引數: -i
命令指令: s
指令修飾: g
相同指令資訊只能使用一次,想使用多次需要加上分號
sed四種定位模式如下:
1、數字定位法
eg:指定行號
sed '3d' [檔案資訊]
sed '2,3d' [檔案資訊]
2、正則定位法
eg:指定正則定位
sed '/^g/d' [檔案資訊]
3、數字和正則定位法
sed '3,/^g/d' [檔案資訊]
4、正則和正則定位法
sed '/^g/,/^j/d' [檔案資訊]
sed的編輯模式指令匯總如下:
d :洗掉
p :列印
a : 在當前行后添加一行或多行
sed '2axxx' [檔案資訊]
c :用新文本修改(替換)當前行
sed '2cxxx' [檔案資訊]
i : 在當前行之前,插入文本(單獨使用時)
sed '2ixxx' [檔案資訊]
r : 在檔案中讀內容
sed '2r r.txt' [檔案資訊]
w : 將指定行寫入檔案
sed '2w w.txt' [檔案資訊]
y : 將字符轉換成另一個字符
sed '2y/fa/FA/' [檔案資訊]
s : 將字串轉換成另一個字串(每一行只替換一次)
sed 's/11/22/' [檔案資訊]
g : 全部執行
sed 's/11/22/g' [檔案資訊]
i : 忽略大小寫(跟 s 模式一起使用時)
& :代表前面匹配到的內容
3.2 命令執行程序

四、sed實踐操作
4.1 實踐環境搭建
cat >person.txt<<EOF
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
EOF
4.2 命令操作實踐
-
查詢實踐
-
單行查找
列印模式空間內容:p 取消默認輸出資訊:-n最終命令執行資訊:
按照行號查找: sed -n '1p' person.txt 按照資訊查找: sed -n '/oldboy/p' person.txt -
多行查找
按照連續的多行查找:
按照行號查找: sed -n '1,3p' person.txt 按照資訊查找: sed -n '/oldboy/,/yy/p' person.txt按照不連續的多行查找:
按照行號查找: sed -n '1p;3p' person.txt 按照資訊查找: sed -nr '/101|103|104/p' person.txt sed -n '/101/p;/104/p' person.txt
-
-
增加實踐
-
按照行號增加
檔案追加資訊指令(行后): a---append 檔案插入資訊指令(行前): i---insert最終命令執行資訊:
sed '$a106\n107' person.txt sed '2a106\n107' person.txt -
按照資訊增加
sed '/oldboy/a106\n107' person.txt
-
-
洗掉實踐
-
單行洗掉
洗掉檔案資訊指令: d---delete i---inputsed -i.bak:-i引數必須寫在所有引數最后面
最終命令執行資訊:
按照行號洗掉: sed '1d' person.txt 按照資訊洗掉: sed '/oldboy/d' person.txt洗掉檔案空行資訊:
sed '/^$/d' person.txt sed -n '/^$/!p' person.txt -
多行洗掉
按照行號洗掉: sed '1,3d' person.txt 按照資訊洗掉: sed '/oldboy/,/yy/d' person.txt
-
-
替換實踐
-
文本替換
編輯檔案資訊引數: i 替換檔案資訊指令: s c 按行進行資訊替換: g (否則只替換每行匹配的第一個資訊)最終命令執行資訊:
替換檔案資訊: sed -i.bak 's#oldboy#oldgirl#g' person.txt -
反向參考
擴展正則識別引數: -r 呼叫正則匹配資訊: &最終命令執行資訊:
替換檔案資訊: sed -r 's#(.*)#<\1>#g' person.txt sed -r 's#.*#<&>#g' person.txt echo 123456|sed -r 's#[1-6]{1}#<&>#g' echo 123456|sed -r 's#.#<&>#g' -
相關案例
1、將nginx.conf中的注釋行全部去掉 [root@localhost ~]# sed '/^ *#/d' /etc/nginx/nginx.conf 2、將nginx.conf中每一行之前增加注釋 [root@localhost ~]# sed 's/.*/# &/g' /etc/nginx/nginx.conf 3、要求一鍵修改本機的ip, 192.168.15.100 ---> 192.168.15.101 172.16.1.100 ---> 172.16.1.101 sed -i 's#.100#.101#g' /etc/sysconfig/network-scripts/ifcfg-eth[01] 4、將/etc/passwd中的root修改成ROOT sed -i 's#root#ROOT#g' /etc/passwd
-
-
拓展實踐
修飾指定資訊取反: sed -n '/^$/!p' person.txt 取出檔案行號資訊: sed '=' person.txt 執行多個相同指令: sed -n '1p;3p;5p' person.txt
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/388899.html
標籤:其他
上一篇:Linux文本處理相關命令
