SED命令詳解


SED常用功能

  1. 處理文本文件
  2. 分析日志文件
  3. 修改配置文件

SED處理流程

文本或管道輸入—-讀入一行到模式空間(臨時緩沖區)—-sed命令處理—–輸出到屏幕—-讀入一行到模式空間—–循環

SED原則

  1. sed一次處理一行內容
  2. sed不改變文件內容(除非重定向或者 -i 參數)
  3. sed可以對所有行進行操作,也可以根據正則選擇選定行

SED的格式

  1. 命令行格式
    sed [options] ‘command’ file
    options: -e -n -i
    command: 行定位(或正則)+ sed命令(操作)
  2. 腳本格式
    sed -f script file

SED命令

-p:           –/etc 下的passwd文件

  1. sed ‘p’ passwd
    輸出兩行同樣內容,因為sed本身就是輸出到屏幕,然后‘p’命令再一次打印
  2. sed -n ‘p’ passwd
    -n 忽略默認輸出//  nl passwd       打印文件並帶行號
    //  nl -b a passwd        打印文件並帶行號且空行也計算行數

行定位

  1. sed -n ’10p’ passwd        定位一行
  2. sed -n ‘/besttest/p’ passwd       使用正則表達式,用//間隔
  3. sed -n ‘6,10p’ passwd        定位多行
  4. sed -n ‘/mail/,/besttest/p’ passwd       定位多行正則匹配
  5. sed -n ’16,/besttest/p’ passwd       定位多行從第16行到匹配行
  6. sed -n ’10!p’ passwd       不選擇這一行
  7. sed -n ‘6,10!p’ passwd       不選擇多行
  8. sed -n ‘4~3p’ passwd        從第4行開始,每三行打印一次  開始行~步長

基本操作命令

a(新增行)/i(插入行)
c(替代行)
d(刪除行)

  1. sed ’12a======’ passwd        在第12行后增加=======
  2. sed ’12i======’ passwd         在第12行前增加=======
  3. sed ‘1,5a=====’ passwd          在1到5行后面全都增加=======
  4. sed ‘5c======’ passwd          第五行替換成======
  5. sed ‘2,5c=====’ passwd          把2-5行全替換成======
  6. sed ‘5d’ passwd       刪除第5行
  7. sed ‘2,5d’ passwd     刪除2-5行

練習:profile文件中最后一行添加內容——–$表示最后一行,內容前面如果需要加空格,那么在a后面               加\ 然后在加空格
eg:sed -n ‘$a\    export TOMCAT_HOME=XXXXX\n     export PATH=$PATH:$TOMCAT’ profile  >> profile
eg:sed -i ‘$a\    export TOMCAT_HOME=XXXXX\n     export PATH=$PATH:$TOMCAT’ profile

練習:刪除空白行—–^代表開始,$代表結束
eg:sed ‘/^$/d’ passwd

練習:服務器日志處理,log中打印error信息
eg:sed -n ‘/error/p’ file.log

替換操作

s:

  1. sed ‘s/old/new/’ passwd     替換操作
  2. sed ‘s/:/$/g’ passwd         g 全局替換,否則每行只替換第一個

練習:獲取eth0中的ip       .*代表所有的
eg:ifconfig | sed -n ‘/inet.*broadcast/p’ | sed ‘s/inet\s\+//’ | sed ‘s/\s\+netmask.*//’
先獲取有ip的那行,然后把ip前面替換成空,后面替換成空,空格占位符是\s,+代表一個以上且要轉義。

sed高級操作

{}:多個sed命令,用;隔開,然后用{}括起來。
eg:nl -b a passwd | sed ‘{10,20d;s/:/%/g}’
刪除10-20行,並且把:替換成%。(不加{}也可以)
eg:nl -b a passwd | sed -n ‘{n;n;p}’
讀取下一個輸入行

&:替換固定的字符串,代表前面匹配的字符
eg:sed ‘s/^[a-z_-]\+/& /’ passwd
用戶名后面統一添加空格

練習:將用戶名的首字母轉換為大寫
\u    \l:對首字母轉成大寫或小寫
\U    \L:對一串字符轉成大寫或小寫
eg:sed ‘s/^[a-z_-]\+/\u&/’ passwd
eg:ls | sed ‘s/.*/\U&/’

():需要轉義\(\),代表替換某部分字符串(\1\2)
eg:sed ‘s/w1\(w2\)\(w3\)/\1\2/’ xxx.txt

練習:獲取eth0中的ip
eg:ifconfig | sed -n ‘/inet.*broadcast/p’ | sed ‘s/inet.*\s\+\([0-9\.]\+\)\s\+netmask.*/\1/’
注意:如果取值前面包含空格使用.*不好使,需要\s\+代表空格,否則取不到值。
eg:ifconfig | sed -n ‘/inet.*broadcast/p’ | sed ‘s/inet\s\+\([0-9\.]\+\).*netmask\s\+\([0-9\.]\+\).*broa*.*\s\+\([0-9\.]\+\)/\1/’
替換\1\2\3取不同的值

練習:獲取passwd文件中,用戶名、uid、gid
eg:sed ‘s/\(^[a-z_-]\+\):x:\([0-9]\+\):\([0-9]\+\).*/\1 \2 \3/’ passwd

sed的讀寫操作

r:讀取指定文件插入到匹配行
sed ‘1r 123.txt’ abd.txt
讀文件不會更改文件內容    1r 代表從第幾行開始
w:復制匹配行拷貝到指定文件里
sed ‘1w 123.txt’ abc.txt              復制abc文件的第一行到123的文件中去,123文件內容會變化。
寫操作會清除目標文件內容,然后再寫內容進去。

sed退出操作

q:退出sed,使用q可以提前退出sed
nl -b a passwd | sed ’10q’         打印前10行。
nl -b a passwd | sed ‘/false/q’         打印直到出現false為止

sed連續命令

e:

nl -b a passwd | sed -e ‘10,20d’ -e ‘s/:/%/g’

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM