sed命令
Linux文本處理三劍客 之 sed
sed stream EDite
做爲行編輯器,對文本進行編輯(以行爲單位進行編輯)
注意:sed編輯文件,卻不改變原文件;
sed的工做原理:
指定一個文本文件,依次讀取文本文件中每行的內容,讀取到模式空間中(PATTERN SPACE),在模式空間中進行文本匹配(正則表達式),對匹配後的內容進行修改(替換、刪除、打印、修改、保存等)正則表達式
用法:
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
sed [參數] 「sed本身獨立的用法格式的語句」[文本文件]編輯器
常見選項
-n 拒絕默認顯示
-r 指定使用擴展的正則表達式
匹配IP
一、全部的 \ 都不要 二、 | 或者
-e script for while if
-f 指定腳本文件
-l 指定文本換行的長度?
-i 直接修改文件內容(不要使用)
地址定界方式
一、直接匹配數值
sed -n '5p' 文件
二、 d~步長
sed -n '1~3p' 文件
三、$ 指定行尾
sed -n '10,$p' 文件
四、/正則/
/正則1/,/正則2/
sed -n '/k\{5,\}/,$p' abc
sed -n '/\(fd\)\+/,+2p' abc ? 正則寫在前面就沒有問題,寫在後面就有問題
sed -n '
五、0,addr
addr 能夠爲 數字/$/正則表達式
sed -n '0,/k\{5,\}/p' abc
六、addr,+N
配置addr行到,addr後N行
sed -n '/fd/,+5p' abc學習
**常見命令
p print 打印(默認在屏幕上顯示出來) 建議和 -n 一塊兒使用;
c 替換
sed "/aaa/c \A" a
d 刪除
sed "/aaa/d" a
sed "1,3d" a
n N 讀取/添加 模式匹配到的行的下一行內容,再對其進行操做
w 保存文件內容到一個新的文件
sed "/patthen/w 新的文件名" 原來的文件名
sed "/k/w /tmp/aabbcc" abc
*s* 文本內容替換,默認替換模式空間匹配到的第一項;
語法格式: s/pattern/字符串/
中間的 / 能夠替換爲任意一個特殊字符 例如:s### s@@@ s%%%%
g 所有
\1 \2 和正則表達式的分組相同,實現反向應用;
指定某一個匹配項進行修改替換
& 調用前面(pattern)匹配的內容
sed "s/r..t/&er/g" 文件
w
p
sed的高級應用
模式空間 -- hold space"佔有空間"
之後本身取學習spa
練習:
刪除/boot/grub/grub.conf文件中全部空白開頭的行行首的空白字符;
sed 's/^[[:space:]]\+//g' /boot/grub/grub.conf
刪除/etc/fstab文件中全部以#開頭,後面至少跟一個空白字符的行 的行首的#和空白字符;
sed 's/^#[[:space:]]\+//g' /etc/fstab
給定一個目錄,取出其目錄名
echo "/etc/passwd" | sed 's/[^/]\+$//'
給定一個目錄,取出其文件名
echo "/etc/passwd" | sed 's#^/.*/\(.*\)##3d
/var/log/message
sed '/[^/]\+/'
dirname -- 取出文件路徑的路徑部分
basename -- 取出文件路徑的文件名部分ip