1、sed(stream editor): 作為行編輯器,對文本進行編輯(以行為單位) 預設顯示輸出所有文件內容 註意:sed編輯文件,卻不改變原文件 2、sed的工作原理: 指定一個文本文件,依次讀取文本文件每行的內容,讀取到模式空間中(PATTERN SPACE),在模式空間中進行文本匹配,對匹 ...
1、sed(stream editor):
作為行編輯器,對文本進行編輯(以行為單位)
預設顯示輸出所有文件內容
註意:sed編輯文件,卻不改變原文件
2、sed的工作原理:
指定一個文本文件,依次讀取文本文件每行的內容,讀取到模式空間中(PATTERN SPACE),在模式空間中進行文本匹配,對匹配後的內容進行修改(替換、刪除、列印、修改、保存等等)
3、用法:
sed [參數] “sed自己獨立的用法格式語句” [文本文件]
4、常見參數
-r 指定擴展的正則表達式
-n 拒絕預設顯示
-e script 後面接腳本文件
-f 指定腳本文件
-l 指定文本的換行長度
-i 直接修改文件內容***危險
5、地址定界
a) 直接匹配數值 sed -n ‘5p’ /etc/passwd
b) 指定步長n~m n為起始數字,m為步長 sed -n ‘1~3p’ /etc/passwd
c) $指定行尾 sed -n ’10,$p’ /etc/passwd
d) /正則表達式/ /正則/,/正則/ sed -n ‘/t\{1,\}/,$p’ /etc/passwd
e) 0,addr sed -n ‘0,/t\{1,\}/,$p’ /etc/passwd 匹配0行到正則行
f) addr,+N 匹配addr行到,addr後N行 sed -n ‘/root/,+2p’ /etc/passwd
6、常見命令
p print 列印(預設在題目上顯示出來),建議和 -n 一起使用
c 替換行 sed “/被替換的值/c \替換的值” 文件
d 刪除 sed “/被刪除的值/d 文件 sed “1,3d” 文件 刪除1-3行
n/N 讀取/添加 模式匹配到的行的下一行內容,在對其進行操作
w 保存文件內容到一個新的文件
s 文本內容替換,預設替換模式空間匹配的第一項,其他不替換
格式:s/pattern/字元串/ 把pattern匹配 的內容替換為字元串
例子 sed “s/r/R/” /etc/etc/passwd 只替換了每行第一個r
g 全部 sed “s/r/R/g” /etc/passwd 把文件中的所有r換為R
\1 \2 \3… 和正則表達式的分組相同,實現反嚮應用;指定某一個匹配項進行修改匹配
& 調用前面匹配的內容 sed “s/test/&er/g” /etc/passwd 把test開頭的所有後面加er尾碼
練習:
1、刪除/boot/grub/grub.conf文件中所有空白開頭的行行首的空白字元
sed 's/^[[:space:]]\+//' /boot/grub/grub.conf
2、刪除/etc/fstab文件中所有以#開頭,後面最少跟著一個空白字元的行的行首的#和空白字元
sed 's/^#[[:space:]]\+//' /etc/fstab
3、給定一個目錄,取出其目錄名
dirname /var/log/message #dirname命令提取路徑的目錄名部分 #或者 echo '/var/log/message' | sed 's/[^/]\+$//'
4、給定一個目錄,取出其目錄名
basename /var/log/message #basename命令提取路徑的文件名部分
#或者 echo '/var/log/message' | sed 's#^/.*/)##'