sed命令基礎2

我在sed命令基礎裏面說了一下sed的基礎用法,sed還有一些高級用法,由於我也是在學習中,寫的博客可能會有想不到的地方,有問題希望大家指出。

    sed的高級用法主要在於兩個空間的使用,模式空間保持空間,模式空間就是我們對於進入其中的語句進行處理的空間,保持空間就像是一個臨時的交換swap,我們可以將模式空間裏面的東西放到保持空間中,或者將保持空間裏面的東西取出追加到模式空間,通過一定的命令,將兩個空間裏面的東西進行處理,能解決很多文本處理問題。

高級編輯命令

  P:打印模式空間開端至\n內容,並追加到默認輸出之前

  x:把模式空間中的內容與保持空間中的內容進行互換

  h:把模式空間中的內容覆蓋到保持空間中

  H:把模式空間中的內容追加到保持空間中

  g:從保持空間取出數據覆蓋至模式空間

  G:從保持空間取出數據追加至模式空間

  n:讀取匹配到的行的下一行覆蓋至模式空間

  N:讀取匹配到的行的下一行追加到模式空間

  d:刪除模式空間中的行

  D:刪除模式空間中從開始到第一個\n

一些示例

  sed -n 'n;p' FILE 顯示偶數行

  sed '1!G;h;$!d' FILE 倒序顯示

  sed -n '1!G;h;$p' FILE 倒序顯示

  sed 'N;D' FILE 顯示最後一行

  sed '$!N;$!D' FILE顯示最後兩行

  sed '$!d' FILE 顯示最後一行

  sed 'G' FILE 給每一行後面加一空行

  sed 'g' FILE 所有行替換成空行

  sed '/^$/d;G' FILE 保證讓每一行非空行後面都有一個空行

  sed 'n;d' FILE 顯示奇數行 

相關的練習(基礎部分的多)

 1、刪除centos7系統/etc/grub2.cfg文件中所有以空白開頭的行行首的空白字符   

cat grub2.cfg |sed -r 's/^[[:space:]]+//'

 2、刪除/etc/fstab文件中所有以#開頭,後面至少跟一個空白字符的行的行首的#和空白字符 

 sed -r "/^#[[:space:]]/s/^#[[:space:]]+([^[:space:]])/\1/" fstab 
sed -r 's/^#[[:space:]]+//' fstab

 3、在centos6系統/root/install.log每一行行首增加#號 

sed 's/^/#/g' /root/install.log

 4、在/etc/fstab文件中不以#開頭的行的行首增加#號

cat /etc/fstab |sed 's/^[^#]/#&/'

 5、處理/etc/fstab路徑,使用sed命令取出其目錄名和基名

 echo /etc/sysconfig/network-scripts/ |sed -r 's#(^/.*/)([^/].*/?$)#a:\1\nb:\2#'

 6、利用sed 取出ifconfig命令中本機的IPv4地址

 ifconfig eth0 |sed -n '2p' |sed 's#^.*addr:##g' |sed 's# Bcas.*$##g'
 ifconfig eth0 |sed -n -e '2s#^.*addr:##g' -e 's# Bcas.*$##gp'

 7、統計centos安裝光盤中Package目錄下的所有rpm文件的以.分隔倒數第二個字段的重複次數

 ls /mnt/cdrom/Packages/ | sed -r -e "s/(.*\.)([^\.].*$)/\1/" -e "s/(.*\.)([^.].*\.)/\2/" | sort | uniq -c | sort -n

 8、統計/etc/init.d/functions文件中每個單詞的出現次數,並排序(用grep和sed兩種方法分別實現)

cat /etc/init.d/functions | sed -r "s/[^[:alpha:]]/\n/g" | sort | uniq -c | sort -n 
cat /etc/init.d/functions | egrep -o "[[:alpha:]]+" | sort | uniq -c | sort -n

 9、將文本文件的n和n+1行合併爲一行,n爲奇數行

seq 10 | sed "1~2N;s/\n/ /"

 

發佈了52 篇原創文章 · 獲贊 5 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章