歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

sed命令詳解

之前的博客講Shell正則表達式的時候講到過sed命令的使用,今天在leetcode上看見一道Bash編程題,知道用sed能實現,卻不知道怎麼做,看來還得詳細的學一下,僅僅是知道有這麼個東西遠遠不夠。

1、sed簡介

主要對數據進行選取、替換、刪除、新增等,每次處理一行內容 。每次讀取一行內容送往緩沖區,sed命令進行處理,處理完之後將緩沖區內容送往屏幕,然後處理下一行。實際上文件內容並沒有改變,除非使用重定向輸出或-i選項。

2、sed命令形式

sed [options] 'command' file(s)

3、option選項

-e 允許進行多個動作
-n 只會將sed命令處理過的行進行打印,否則是全篇打印
-i sed默認不對文件進行修改, -i選項是表示直接修改源文件

4、command命令

a 在當前行後追加一行內容
sed ‘3a Hello world’file 在第三行後添加一行hello world
i 在當前行前插入一行
sed ‘3i Hello world’file 在第三行之前插入一行helloworld
c 替換當前行內容
sed ‘3c Hello world’file 將第三行替換為helloworld
d 刪除指定行
sed ‘3d’ file 刪除第三行
h 拷貝模板塊的內容到內存中的緩沖區
H 追加模板塊的內容到內存中的緩沖區
g 獲得內存緩沖區的內容,並替代當前模板塊中的文本
G 獲得內存緩沖區的內容,並追加到當前模板塊文本的後面
p 打印模板塊的行
sed -n‘3p’file 打印第三行內容
s/re/string/g 用string替換正則表達式re,若沒有g只替換改行第一個re
sed ‘3s/haha/helloworld’file 把第三行的第一個haha替換為helloworld
sed ‘3s/haha/helloworld/g’file 把第三行的所有haha替換為helloworld

5、常用正則表達式

^ 錨定行的開始 如:/^sed/匹配所有以sed開頭的行
$錨定行的結束 如:/sed$/匹配所有以sed結尾的行
. 匹配一個非換行符的字符 如:/s.d/匹配s後接一個任意字符,然後是d
*匹配任意字符或空
[] 匹配一個指定范圍內的字符,如/[Ss]ed/匹配sed和Sed,[0-9]匹配任意一個數字
[^] 匹配一個不在指定范圍內的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一個字母開頭,緊跟ed的行
& 用來保存搜索的字符,如s/love/aa&bb/,love替換為aalovebb
sed 's/^192.168.0.1/&localhost/'    &符號表示替換換字符串中被找到的部份。所有以192.168.0.1開頭的行都會被替換成它自已加 localhost,變成192.168.0.1localhost

\ 轉義字符 使特殊字符轉換為普通字符
\* 就是字符*
\^ 就是字符^
x{m} 重復字符x,m次,如:/0{5}/匹配包含5個0的行
x{m,n} 重復字符x,至少m次,不多於n次,如:/0{5,10}/匹配5-10個0的行
x{m,} 重復字符x,至少m次,如:/0{5,}/匹配至少有5個0的行
sed -n '5,/^test/p' example-----打印從第五行開始到第一個包含以test開始的行之間的所有行。(-n)選項和p標志一起使用表示只打印那些指定的行

最後推薦一個帖子講的更詳細一點linux sed命令詳解
Copyright © Linux教程網 All Rights Reserved