當前位置:
首頁 >
Linux之sed:修改器按照字符和行数进行筛选和替换行值 选项[动作
發布時間:2024/9/19
36
豆豆
生活随笔
收集整理的這篇文章主要介紹了
Linux之sed:修改器按照字符和行数进行筛选和替换行值 选项[动作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?說明
sed用于選取替換刪除新增? ?sed [選項] [動作][文件]選項: -n:一般sed命令會把所有數據都輸出到屏幕,如果加入此選擇,則只會把經過sed命令處理的行輸出到屏幕。 -e:允許對輸入數據應用多條sed命令編輯。 -f 腳本文件名:從sed腳本中讀入sed操作。和awk命令的-f非常類似。 -r:在sed中支持擴展正則表達式。 -i:用sed的修改結果直接修改讀取數據的文件,而不是由屏幕輸出動作: a \:追加,在當前行后添加一行或多行。添加多行時,除最后一行外,每行末尾需要用“\”代表數據未完結。 c \:行替換,用c后面的字符串替換原數據行,替換多行時,除最后一行外,每行末尾需用“\”代表數據未結。 i \:插入,在當期行前插入一行或多行。插入多行時,除最后一行外,每行末尾需要用“\”代表數據未完結。 d:刪除,刪除指定的行。 p:打印,輸出指定的行。 s:字串替換,用一個字符串替換另外一個字符串。格式為“行范圍s/ 舊字串/新字串/g”(和vim中的替換格式 類似)。sed所做的修改并不會直接改變文件的內容(如果是用管道符接收的命令的輸出,這種情況連文件都沒有), 而是把修改結果只顯示到屏幕上,除非使用“-i”選項才會直接修改文件。查詢
-n只輸出合乎條件的 p顯示第二行 sed -n '2p' test.txt 輸出:22 bbi修改 d刪除第二行 sed -i '2d' test.txt刪除
刪除第2行 m,n 表示對m和n行之間的所有行進行操作,也包含第m行和第n行 m,$ 表示對m行以及其后面的所有行進行操作 2d表示僅僅刪除第2行 [root@localhost string]# sed '2d' t1.txt > t4.txt [root@localhost string]# cat t4.txt t1t1t1t1t1t1t1t1t1t1t1t1t1刪除以2開頭的行 sed '/^2/d' test.txt刪除包含2的文件 sed '/2/d' test.txt新增:a后i前c替換行s替換字符串
sed '1a hello world' test.txt 其中a命令表示在指定行的后面附加一行,1a則是在第一行的后面添加一行,添加的內容就是a后面的內容,如 果a的前面沒有地址限定則在所有行的后面都會添加指定的字符串sed '1i hello world' test.txt 命令i表示在指定的行的前面插入一行,插入的內容為其后面的字符串sed '1c hello world' test.txt 命令c會替換指定的行的所有內容,替換成其后面的字符串,所有的新增,刪除,替換行,這些命令前面的地址 修飾都可以指定地址空間,也都可以使用正則表達式,命令會應用在選出的符合地址條件的所有行上面,如: sed '/^2/c hello world' test.txt 替換以2開頭的行,其內容是c命令后面的字符串替換部分字符串而不是整行 sed 's/aa/AA/' test.txt s/待替換的字符串/新字符串/ 也就是說使用后面的 AA 替換文件中出現的前面的 aa sed '1s/aa/AA/g' test.txt 加上g選項之后,全局替換,也就說一行中所有符合條件的舊字符串都會被替換成新字符串,而不僅僅是第一個 可以看到僅僅對第一行進行了替換操作,其他的地址限定方法同樣也是可以使用的,我們可以使用m,n的限定, sed '5,$s/aa/AA/g' test.txt sed '/^[0-9]/s/aa/AA/g' test.txt 我們在s命令前面添加了 /^[0-9]/ 這個修飾,該正則表達式表示對所有以數字開頭的行,執行s操作元字符
$ 表示行尾 ^ 表示行首 [a-z0-9]表示字符范圍 [^]表示除了字符集中的字符以外的字符sed的正則中 \(\) 和 \{m,n\} 需要轉義 . 表示任意字符 * 表示零個或者多個 \+ 一次或多次 \? 零次或一次 \| 表示或語法例子
sed -n '/^2011-08-23.*ERROR/p' demolog.log2011-08-23 19:57:30,709 [] ERROR bo.CommodityCerOrderBO - order-fi 2011-08-23 19:57:31,721 [] ERROR bo.CommodityCerOrderBO - order-f提取demo.log中的日期,日志級別,訂單id和狀態。 sed -f demo.sed2 demo.log #下面的一行是替換指令,就是把19位長的日期和INFO/ERROR,id,和后面的一截提取出來,然后用@分割符把這 4個字段重新按順序組合 s/^\([-\: 0-9]\{19\}\).*\(INFO\|ERROR\) .*order-fix.curr_id:\([0-9]\+\),\(.*$\)/\1@\3@\2@\4/p 輸出: 2011-08-23 19:57:30@10117@INFO@status:attr_ids不含0跳過 2011-08-23 19:57:30@10117@ERROR@status:添加屬性id,但由于認證分類參數有誤默認取匹配屬性名稱的第 一個屬性id:100104 2011-08-23 19:57:31@10117@ERROR@status:添加屬性id,但由于認證分類參數有誤默認取匹配屬性名稱的第 一個屬性id:100105?
總結
以上是生活随笔為你收集整理的Linux之sed:修改器按照字符和行数进行筛选和替换行值 选项[动作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 杭州绿城集团在济南有楼盘吗?
- 下一篇: 浙江省杭州市拱墅区石桥路上小学没有租房备