1. 程式人生 > >Linux 基礎-----sed工具應用題

Linux 基礎-----sed工具應用題

linux;sed;grep;正則表達式

處理文本的工具sed
?Stream EDitor, 行編輯器
?sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時
緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的
內容,處理完成後,把緩沖區的內容送往屏幕。然後讀入下行,執行下一個循環。
如果沒有使諸如‘D’的特殊命令,那會在兩個循環之間清空模式空間,但不會清
空保留空間。這樣不斷重復,直到文件末尾。文件內容並沒有改變,除非你使用重
定向存儲輸出。
?功能:主要用來自動編輯一個或多個文件,簡化對文件的反復操作,編寫轉換程序等
參考

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

2、刪除/etc/fstab文件中所有以#開頭,後面至少跟一個空白字符的行的行首的#
和空白字符
3、在/etc/fstab文件中不以#開頭的行的行首增加#號
4、處理/etc/fstab路徑,使用sed命令取出其目錄名和基名
5、利用sed 取出ifconfig命令中本機的IPv4地址
6、統計centos安裝光盤中Package目錄下的所有rpm文件的以.分隔倒數第二個
字段的重復次數
7、統計/etc/init.d/functions文件中每個單詞的出現次數,並排序(用grep和
sed兩種方法分別實現)
.

1.cat /etc/grub2.cfg |sed -r ‘s/^[[:space:]]+//‘
技術分享圖片

2.cat /etc/fstab |sed -r ‘s/(^#[[:space:]]?)//‘


技術分享圖片
3.cat /etc/fstab |sed -r ‘s/^([^#].)/#\1/‘
技術分享圖片
4.1取文件名:echo "/etc/fstab"| sed ‘s@[^/]+$@@‘
技術分享圖片
4.2取基名:echo "/etc/fstab"| sed ‘s@.
/([^/]+)$@\1@‘

技術分享圖片
5.*ifconfig ens33|sed -n ‘2p‘|sed ‘s/.inet (.) netmas./\1/‘*
技術分享圖片
此題方法很多,如下:
ifconfig ens33| sed -r ‘2!d;s@(.
inet )(.)( net.)@\2@‘
ifconfig ens33|sed -n ‘2p‘ |sed ‘s/.inet //‘ |sed ‘s/ netmask.
//‘

6.ls /misc/cd/Packages/ |grep "rpm$"|sed -r ‘s/..(.).rpm$/\1/‘|sort |uniq -c
技術分享圖片
7.1sed方法:cat /etc/init.d/functions | sed -r ‘s@[^[:alpha:]]+@\n@g‘|sort |uniq -c|sort -n
技術分享圖片
7.2grep方法:cat /etc/init.d/functions | grep -o -E "\<[[:alpha:]]+\>"|sort|uniq -c |sort -n
技術分享圖片
7.3tr 方法:cat /etc/init.d/functions | tr -c ‘[:alpha:]‘ ‘\n‘ |sort|uniq -c|sort -n
技術分享圖片
此三種方法,大家可以看出,tr和sed的方法理念相一致,均采用補集的思想,將不是字母的字符全部轉換為newline,然後再進行統計;而grep -o方法,將每一個單詞進行分割,並進行單獨分行,後續再進行統計。
三種方法,grep和tr/sed得到的答案不一樣,肯定某種方法存在著漏洞。
這個問題目前我沒想到解決的方法,希望大神指出
20180412 接引道人

Linux 基礎-----sed工具應用題