sed命令学习
sed編輯器,處理文本過程如下:
sed把當前處理的行保存在一個臨時緩沖區中,然后處理緩沖區中的行,完成后把該行發送到屏幕上。sed每處理完一行就將其從臨時緩沖區刪除,然后下一行讀入,處理和顯示。處理完輸入文件的最后一行后,sed便結束運行。
sed [參數] '命令' file
sed中模式空間(臨時)和保持空間
?
?
passwd代表文件名
1,查詢語句?
輸出第三行
?sed -n '3p' passwd
輸出第3 到5行
?sed -n '3,5p' passwd
刪除第3到5行
?sed -n '3,5d' passwd
表示查詢出passwd文件中存在sbin字符的所有行并打印出來,其中兩個/表示的是其中的是正則表達式,-n和/p是該命令的參數,需要聯合使用:
sed -n ‘/sbin/p’ passwd?
?
2,緊跟在s命令后的字符就是查找串和替換串之間的分隔符。分隔符默認為正斜杠,但可以改變。無論什么字符(換行符、反斜線除外),只要緊跟s命令,就成了新的串分隔符:
head -3 passwd | sed 's#bin#Replace#g
sed -n '1,3s' 's#bin#Replace#g' passwd
e選項:用于sed執行多個指令,指令放置順序對最終結果有影響
?head -5 passwd | sed -e '1,3d' -e 's/sh/Replace/g'
r命令:當匹配到bin時,就讀入文件的內容
head -3 passwd | sed '/bin/r append.txt'
w命令:匹配到時,寫入到文件中
sed?-n?'/hrwang/w me.txt'?datafile
a\命令:匹配到時追加到文件中
sed?'/^hrwang/a\ append this line to file datafile
q命令:q命令將導致sed程序退出,不再進行其它的處理
sed?'/hrwang/{s/hrwang/HRWANG/;q;}'?datafile
?
3,sed命令:沒有重定向不會真正修改源文件中的內容。sed不會更改文件內容
重定向指令為?>
或者使用指令 -i, 直接修改文件內容,不過-i會額外添加一行,造成誤解,不可用
?
4,新增語句:
sed '1a the content append to file' passwd
sed '1i the content inset to the forward of first line' passwd
sed '1c replace the first line of file to this content' passwd
sed 's/false/true/' passwd # replace false in this line to true
sed '/hello/aworld' mk ##a代表指定行后增加新行
sed 's/hello/hello world/g' mk
sed 's/hello/hello\nworld/g' mk
?
?
5 刪除語句:
sed '/postgres/d' passwd # delete the line suit this rule
sed '2d' passwd # delete the second line
sed '/^UUID/d' mk
sed '/^$/d' mk
?
6 替換語句:
修改并修改文件
sed? -i '/s/cpu_core=8/cpu_core=72/' mk?
如果使用 ‘s/cpu_core=8/cpu_core=72/p' mk 此行后會新加一行cpu_core=72;
如果末尾加g,說明是全局替換
sed -i 's/westos/redhat/g' passwd
整行替換
sed '/hello/chello world' mk
使用i命令向數據流插入文本行,i命令會在指定行前增加一個新行
sed '/hello/iworld\nlee' mk
?
7 打印文本:
sed -n '/\:/p' mk
sed -n '/^#/p' mk
sed -n '/^#/!p' mk
sed -n '1~2p' mk ##打印奇數行
sed -n '2~2p'? mk ##打印偶數行
?
8 參數:
-e 默認情況:在處理輸入時。sed后面直接添加編輯命令
當一條sed中執行多個編輯命令時,-e才有意義,且不可省略,其他無意義
-n參數:不會把緩沖區內容輸入到屏幕上,結合p指令使用,只輸出匹配的行
sed -n '/^#/p' lee_temp #輸出以#開頭行
sed -n '/n$/p' lee_temp #輸出以n結尾行
sed -n 's///gp' #加g與不加g的區別是,加g意味著全行進行指令操作,不加的話,只將指令運用于第一個匹配到的位置
?
轉載于:https://www.cnblogs.com/lixiangfu/p/11207567.html
總結
- 上一篇: mysql binlog空间维护
- 下一篇: 洛谷P2822 组合数问题