文本處理sed
Sed介紹:
處理文本的工具sed ,Stream EDitor, 行編輯器
sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件,簡化對文件的反復操作,編寫轉換程序等
在linux中文件的行結尾用二進制為0a表示結尾
在windows中文件的行結尾用二進制為0d
0a表示結尾
Sed簡單用法:
用法:
sed[option]… ‘script’ inputfile…
常用選項:
-n:不輸出模式空間內容到屏幕,即不自動打印
-e: 多點編輯
-f:/PATH/SCRIPT_FILE: 從指定文件中讀取編輯腳本
-r: 支持使用擴展正則表達式
-i.bak(文件后綴): 備份文件并原處編輯(用于修改文件很危險的操作建議使用時備份)
script:
‘地址命令‘(表示要對那些文件操作的條件,對那些行的操作)
地址定界:
(1) 不給地址:對全文進行處理
(2) 單地址:
#: 指定的行
/pattern(正則表達式)/:被此處模式所能夠匹配到的每一行
(3) 地址范圍:
#,#
#,+#(表示為#行以后的+#行)
/pat1/,/pat2/ 顯示pat1 和pat2之間的行都會顯示
#,/pat1/ (從#到pat1 最先發現pat1停止)
(4) ~:步進
1~2 奇數行(以1開始每次增加2為步進)
2~2 偶數行(以2開始每次增加2為步進數)
取出文件的偶數行:
Cat –n /etc/passwd |Sed –n ‘2~2p’
d: 刪除模式空間匹配的行
p: 顯示模式空間中的內容(將一個行再打印一遍)
a [\]text:在指定行后面追加文本,支持使用\n實現多行追加
i[\]text:在行前面插入文本
c [\]text:替換行為單行或多行文本
將一行分為兩行表示
w /path/somefile: 保存模式匹配的行至指定文件(保存到別的文件里)
r /path/somefile:讀取指定文件的文本至模式空間中匹配到的行后
=: 為模式空間中的行打印行號
!:模式空間中匹配行取反處理
s///:查找替換,支持使用其它分隔符,s@@@,s###
替換標記:
g: 行內全局替換
p: 顯示替換成功的行(與-n組合使用)
w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中
例:修改系統當前版本號(sed -i.bak ‘s/6.8/8.8/’
/etc/centos-release)
sed示例:
sed ‘2p’ /etc/passwd 將第二行在打印一次
sed –n ‘2p’
/etc/passwd 只打印顯示第二行
sed –n ‘1,4p’ /etc/passwd 只打印1到4行的內容
sed –n ‘/root/p’
/etc/passwd 只打印 包含/root/的行
sed –n ‘2,
/root/p’ /etc/passwd 從2行開始到包含/root/的行進行打印
sed -n ‘/^$/=’ file 顯示空白行的行號
sed –n –e ‘/^$/p’ –e ‘/^$/=’
file
sed ‘/root/a\superman’ /etc/passwd行后 在/root/de后插入superman
sed ‘/root/i\superman’ /etc/passwd行前 在/root/前面插入superman
sed ‘/root/c\superman’ /etc/passwd代替行 用superman替代/root/的行
sed ‘/^$/d’ file 刪除空白行
sed ‘1,10d’ file 刪除1到10行
nl /etc/passwd| sed ‘2,5d’ 刪除2到5行
nl /etc/passwd| sed ‘2a tea’ 在a的后面插入sed
sed ‘s/test/mytest/g’ example 將test全局替換為mytest
sed –n
‘s/root/&superman/p’ /etc/passwd單詞后(& 代表前面搜索到的內容)
sed –n
‘s/root/superman&/p’
/etc/passwd單詞前
sed -e ‘s/dog/cat/’
-e ‘s/hi/lo/’ pets (多點操作 -e) 在將dog替換為cat的同時 也將hi替換為lo
sed –i.bak ‘s/dog/cat/g’ pets 修改文件將dog全局替換為cat,并且備份文件為.bak后綴的文件
列:將ifconfig eth0的IP地址取出來
ifconfig eth0|sed -n 2p|sed -e ‘s/.*r://’
-e ‘s/ B.*//’
ifconfig eth0|sed -e ‘s/.*inet addr://’ -e ‘s/ B.*//’ -n -e 2p
取基名(利用正則表達式的分組)
echo
/etc/sysconfig/network-scripts/ |sed -r
‘s@(^/.*/)([^/]+/?)@\2@’
取目錄名
echo
/etc/sysconfig/network-scripts/ |sed -r
‘s@(^/.*/)([^/]+/?)@\1@’
替換文件內的非#開頭的以#開頭
sed -r
‘s/(^[^#])/#\1/’ /etc/fstab
sed -r ‘s/^[^#]/#&/’ /etc/fstab
Sed高級用法:(在sed的模式空間上增加一個保持空間)
h: 把模式空間中的內容覆蓋至保持空間中
H:把模式空間中的內容追加至保持空間中
g: 從保持空間取出數據覆蓋至模式空間
G:從保持空間取出內容追加至模式空間
x: 把模式空間中的內容與保持空間中的內容進行互換
n: 讀取匹配到的行的下一行覆蓋至模式空間
N:讀取匹配到的行的下一行追加至模式空間
d: 刪除模式空間中的行
D:刪除當前模式空間開端至\n的內容(不再傳至標準輸出),放棄之后的令,但是對剩余模式空間重新執行sed
sed示例:
sed -n ‘n;p’
FILE (與-n組合使用隔行打?。?span>
獲取ip:ifconfig eth0 |sed ‘2!d;s/.*r://;s/
B.*//’
sed ‘1!G;h;$!d’ FILE (倒序打印)
sed ‘$!N;$!D’ FILE (只保留最后兩行)
sed ‘$!d’ FILE (顯示最后一行)
sed ‘G’ FILE (格一行顯示)
sed ‘g’ FILE (顯示下一行)
sed ‘/^$/d;G’ FILE
sed ‘n;d’ FILE 隔行顯示
sed -n ‘1!G;h;$p’ FILE
原創文章,作者:GYF,如若轉載,請注明出處:http://www.www58058.com/74756