sed與grep正則


 string editor  流編輯器

    sed編輯器是一行一行的處理內容,正在處理的內容存放在緩沖區內,處理完后

按照選項的規定進行輸出或者修改文件

option:
-n 靜默模式結合p可以只輸出修改行,讀取指定行數
-e    多操作指令
-f     運行腳本
-i   修改文件
-i.bak   修改同時備份.bak文件
-r   使用擴展正則
command:
a 追加
i 插入
p 打印
d 刪除
r/R 讀取文件/一行
w 存檔
s 查找
c 替換
y 替換
h/H 復制拷貝/追加緩沖區到存放空間
g/G   粘貼 從存放空間取回/追加到模式空間
x   兩個空間內容交換
n/N 拷貝/追加下一行內容到當前
D 刪除\n之前的內容
P 打印\n之前的內容
b   無條件跳轉
t   滿足匹配后的跳轉
T 不滿足匹配時的跳轉

 

 

 

 常用用法: 

sed 's/root/rooot/g'  /etc/passwd          #將root替換成rooot,並標准輸出 sed 's/root/rooot/g' /etc/passwd > /etc/passwd   #將替換結果作為文件修改(謹慎使用,注意備份)

sed -i 's/root/rooot/g' /etc/passwd         #將替換結果作為文件修改

 

 

輸出第三行 

sed -n '3p' /etc/passwd

-n抑制輸出,如果不加上p打印的話,修改行是不會輸出顯示出來的

 

輸出前三行

sed -n '1,3p' /etc/passwd
head -3 /etc/passwd

 

輸出第一行和第三行

nl /etc/passwd | sed -n -e "1p" -e "3p"

 

輸出前三行之外的行

sed -n '1,3!p'

注意使用單引號,防止!p轉義

 

輸出第三行及其之后的三行

nl passwd | sed  -n '3,+3p'

 

 

將文本每行最后七個字符換成!號

sed   -n  's#.\{7\}$#!#p' ooo

在文本的每一行前添加#符號,此時不要開啟靜默模式-n

sed  's/^.\?/#&/' passwd

&  替代符 替代前面所匹配的

?  數量符  需要轉義 表示1個或0個

/  分隔符  此處三個都是 可以用別的符號代替,避免沖突,下面是一個斜線沖突避免的例子

sed 's_/bin/bash_/sbin/nologin_'  /etc/passwd

 

將某個目錄下所有文件文本中的kkkkk 換成 ddddd

sed -i 's/kkkkk/ddddd/g' `grep kkkkk -rl mydir` 

grep 中  -r遞歸幾層

 

 截取文本中的某一段(IP地址)並存放與文件中

cat eth0 | sed 's/.*t addr://' | sed 's/ Bc.*//' |xargs echo > ech0

sed  -i  -e  's/.*t addr://'   -e  sed 's/B.*//'  eth0

 

 

.*  表示任意字母任意數量

-e  表示多點編輯

-i   表示修改文件

 

刪除第6行到最后一行

sed   '6,$d'  file

 

刪除第1行 和 第3行

sed   -e  '1d'  -e '3d'  file

 

第3行上面插入兩行

sed '3i hello world \

>the text' file     

 

第4行下追加一行

sed  "4a Hello world" passwd

 

替換行

sed '3c33333333'  file    #替換第三行

 

保存apache配置文件中的非注釋行

sed -n '/^[^#]/w apache.conf' /etc/apache2/apache2.conf

 

對字符操作

把file中的包含root的行刪除

sed  '/root/d'  file    

顯示包含某些字符的行

sed -n '/root/n'  file   

檢索行並於此執行命令 命令間分好隔開

sed -n  '/root/{s/bash/bullet;p;q}'  file  #將含有root的行上把bash改成bullet並輸出

s替換 p打印 q退出

 

 

Grep的正則匹配

匹配空行

grep -n ^$  file

 

匹配非空行

grep -n -v ^$ file

 

匹配單引號

grep \' /etc/services  --color

grep "'" /etc/services --color

 

模糊匹配,星號表示前一個字母零個或多個

grep -n spo* /etc/passwd --color

 

匹配ga或者ge

grep g[ae] /etc/passwd --color

 

匹配非注釋行

grep -v \# /etc/apache2/apache2.conf

grep ^[^#] /etc/apache2/apache2.conf --color

注意上面兩個語句都可以匹配非注釋行,但第一個語句繪保留空行,第二個不會

 

字符數量匹配

grep -n "o\{2,3\}" /etc/passwd

注意轉義需要引號

 

單詞精確匹配

grep "\<spool\>" /etc/passwd --color

 

 

最后的小插曲

cat -n 與 nl 的區別,實踐出真知!


免責聲明!

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



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