筆記整理開始時間:2018年4月17日08:45:48html
更多內容請點擊:正則表達式
Linux學習從入門到打死也不放棄,徹底筆記整理(持續更新,求收藏,求點贊~~~~)
centos
http://www.javashuo.com/article/p-viilhgyh-vk.html
編輯器
第9章 文本處理工具sedide
本章內容工具
sed介紹學習
sed用法centos7
sed高級用法spa
文本處理工具sed3d
Stream EDitor,行編輯器
又稱流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時
緩衝區,稱爲"模式空間"(pattern space),接着用sed命令處理緩衝區中
的內容,處理完成後,把緩衝區的內容送往屏幕。而後讀入下一行,執行下
一個循環。
若是沒有使用諸如「D」的特殊命令,那會在兩個循環之間清空模式空間,但不
會清空保留空間。這樣不斷重複,直到文件末尾。文件內容並無改變,除非
你使用重定向存儲輸出。
功能:
主要用來自動編輯一個或多個文件,簡化對文件的反覆操做,編寫轉換程序等
參考:http://www.gnu.org/software/sed/manual/sed.html
sed用法:
sed [option]..'script' inputfile..
經常使用選項:
-n 不輸出模式空間內容到屏幕,即不自動打印
-e 多點編輯
-f /path/scipt_file 從指定 文件中讀取編輯腳本
-r 使用擴展的正則表達式
-i.bak: 備份文件並原處編輯
scrip:
'地址命令' 地址+命令
地址定界:
不給地址:對全文進行處理
單地址:
#:指定的行,
$:最後一行
/pattern/: 被此處模式所可以匹配到的每一行
地址範圍:
#,# 第#行到第#行到第#行
#,+@ 第#行到第#+@行
/pat1/,/par2/ 匹配part1的行到匹配part2的行
#,/part/ 第#行到匹配part的行
~:步進
1~2 奇數行
2~2 偶數行
編輯命令:
d 刪除模式空間匹配的行,並當即啓用下一輪循環
p 打印當前模式空間內容,追加到默認輸出以後
a[\]text: 在指定行後面追加文本
支持使用\n實現多行追加
i[\]text: 在指定行前面插入文本
c[\]text: 替換行尾單行或多行文本
w /path/somefile: 保存模式匹配的行至指定文件
r /path/somefile: 讀取指定文件的文本至模式空間中
匹配到的行後
=: 爲模式空間中的行打印行號
查找替換:
s///: 查找替換,支持使用其餘分隔符,s@@@,s###
替換標記:
g:行內全局替換
p:顯示替換成功的行
w /pash/to/somefile: 將替換成功的行保存至文件中
-n pgw file 全局替換且打印匹配行 並保存匹配行至文件
sed 示例:
sed '2p' /etc/passwd
sed -n '2p' /etc/passwd
sed -n '1,4p' /etc/passwd
sed -n '2,/root/p' /etc/passwd
sed -n -e '/^$/p' -e '/^$/=' file sed -n '/^$/p;/^$/=' file
sed '/root/a\hello' /etc/passwd
sed '/root/i\hello' /etc/passwd
sed '/root/c\hello' /etc/passwd
sed '/^$/d' file 刪除空行
sed '/1,10d' file
nl /etc/passwd |sed '2,5d' nl = cat -b 非空行編號
nl /etc/passwd |sed '2a tea' 行後插入tea
sed 's/test/mytest/g' file 全文查找替換
sed -n 's/root/&superman&/p' /etc/passwd 添加替換 &引用原文
sed -e 's/dog/cat/' -e 's/hi/lo/' pets
sed -i.bak 's/dog/cat/g' pets
高級編輯命令:
P 打印模式空間開端至\n內容,並追加到默認輸出以前
h 把模式空間中的內容覆蓋至保持空間中
H 把模式空間中的內容追加至保持空間中
g 從保持空間取出數據覆蓋至模式空間
G 從保持空間取出內容追加至模式空間
x 把模式空間中的內容與保持空間中的內容進行替換
n 讀取匹配到的行的下一行覆蓋至模式空間
N 讀取匹配到的行的下一行追加至模式空間
d 刪除模式空間中的行
D 若是模式空間中包含換行符,則刪除知道第一個換行符的模式空間中的文本,
並不會讀取新的輸入行,而使用合成的模式空間從新啓動循環。若是模式空間
不包含換行符,則會像發出d命令那樣啓動正常的新循環
H h爲存 G g 爲取 如沒有存,則取爲空行
示例:
sed -n 'n;p'file 打印偶數行
sed '1!G;h;$!d' 漢諾塔 倒序顯示 至關於 tac
sed 'N;D' file 只顯示了最後一行至關於 sed -n '$p' f1
sed '$!N;$!D' file 顯示了最後兩行
sed '$!d' file 顯示了最後一行
sed 'G' file 每一行後都加上空行
sed '/part/g' file 指定行替換爲空行
sed '/^$/d;G' file 刪除空行以後每一行以後都加空行
sed 'n;d' file 刪除偶數行(只顯示奇數行)
sed 'n;n;d' file 刪除3的倍數行,從第3行開始
sed '1~3d' file 從第1行開始,隔2行刪除1行
顯示奇數行
seq 10 | sed '2~2d'
seq 10 | sed -n '1~2p'
seq 10 | sed 'n;d'
顯示偶數行
seq 10 | sed '1~2d'
seq 10 | sed -n '2~2p'
seq 10 | sed -n 'n;p'
練習:
1,刪除centos7系統/etc/grub2.cfg 文件中全部以空白開頭的行行首的空白
字符
cat /etc/grub2.cfg | sed -r 's/^[[:space:]]+(.*)$/\1/'
2. 刪除/etc/fstab 文件中全部以#開頭,後面至少跟一個空白字符的行的行首
的#和空白字符
cat /etc/fatab |sed -r 's/^#[[:space:]]+(.*)$/\1/'
3. 在centos6系統/root/install.log每一行行首增長#號
cat /root/install.log | sed -r 's/.*/#&/'
4. 在/etc/fstab 文件中不以#開頭的行的行首增長#號
cat /etc/fstab |sed -r 's/^[^#].*/#&/'
5. 處理/etc/fstab路徑,使用sed命令取出其目錄名和基名
basename:
echo /etc/fstab |sed -r 's#.*/([^/]+/?)#\1#'
dirname
echo /etc/fstab |sed -r 's#^(.*/)\<.*#\1#'
6. 利用sed 取出ifconfig命令中本機的ipv4地址
ifconfig |sed -n -r '2s/.*inet\ (.*)\ netmask.*/\1/p'
7. 統計centos安裝光盤中Package目錄下的全部rpm文件的以.分隔倒數第二個
字段的重複次數
ls |sed -r 's/.*\.([^.]+)\.rpm/\1/' |sort|uniq -c|sort -nr
8.統計/etc/init.d/functions文件中每一個單詞的出現次數,並排序(用grep
和sed兩種方法分別實現)
sed方式:
cat /etc/init.d/functions|sed -r 's/[^[:alpha:]]/\n/g'|sed -r '/^$/d'|sed -r '/^.$/d'|sort|uniq -c|sort -nr
總單詞數:1747 (一個字母不算單詞)
cat /etc/init.d/functions|sed -r 's/[^[:alpha:]]/\n/g'|sed -r '/^$/d'|sed -r '/^[^ai]$/d'|sort|uniq -c |sort -n
總單詞數:1774 除開a i 以外單字母不算單詞
cat /etc/init.d/functions|sed -r 's/[^[:alpha:]]/\n/g'|sed -r '/^$/d'|sort|uniq -c |sort -n
總單詞數:1994 單個字母也算單詞
grep方式:
cat /etc/init.d/functions|grep -Eoi '[[:alpha:]]+'|sort|uniq -c|sort -n
總單詞數:1994
9.將文本文件的n和n+1行合併爲1行,n爲奇數行
sed -n 'N;s/\n/ /' f1
cat f1 |xargs -n2
筆記整理完成時間:2018年4月20日14:06:12