2018-09-22 sed 命令詳解

lunixs三大基本文本處理工具:grep sed awk

字符處理用法均涉及正則表達(dá)式,我們先學(xué)習(xí)正則

REGEXP: regular expression

pattern:

正則表達(dá)式分為2類(lèi):

basic REGEXP:基本

Extended REGEXP:擴(kuò)展

基本正則表達(dá)式:

擴(kuò)展的正則表達(dá)式:

字符匹配:

·:任意單個(gè)字符

?:其前字符0次或1次

+:匹配其前字符至少1次

{m,n}:不用加反斜線,

分組:(),\1,\2,\3……

或者

a|b :or的意思

grep -e =egrep

fgrep:fast 快速搜索,不支持正則表達(dá)式

sed基本用法:

Stream Editor

? ? 行編輯器:逐行進(jìn)行(全屏編輯器:vi)

sed每次把一行讀取到模式空間,處理文本后輸出到屏幕,sed對(duì)原文件不做任何處理,僅對(duì)模式空間中的文件做處理。

sed:模式空間

sed? 'addressCommand'? file……

對(duì)這個(gè)文件中符合地址的行執(zhí)行該命令

Address:

? ? 1.StartLine,EndLine:1,100

? ? $:最后一行

? ? $-1:倒數(shù)第二行

? ? 2./RegExp/ :/^root/

? ? 3./pattern1/,/pattern2/ :第一次被模式1匹配到的行開(kāi)始到第一次被模式2匹配到的行結(jié)束。

? ? 4.LineNumber指定的行

? ? 5.StartLine,+N:從startLine行開(kāi)始,向后的N行,一共是N+1行。

command:

? ? d:刪除符合條件的行

? ? p:顯示符合條件的行(print)

? ? -n:靜默模式?????

不顯示模式空間的內(nèi)容,只顯示命令相關(guān)內(nèi)容

? ? a \string:在指定的行后面追加新行,內(nèi)容為"string"

? ? i \string:在指定的內(nèi)容前面添加新行,內(nèi)容為string

? ? r? filename:將指定文件的內(nèi)容添加至符合條件的行數(shù),$r,用于合并文件。

? ? w:將地址指定的范圍內(nèi)的內(nèi)容另存至指定文件中

? ? s/pattern/string/修飾符:查找并替換,將每一行中pattern替換成string,默認(rèn)只替換每行第一次遇到的模式匹配到的string

? ? ? ? 加修飾符

? ? ? ? ????g:全局替換

? ? ? ? ? ? i:忽略字符大小寫(xiě)

? ? ? ? s///:s###,s@@@

? ? ? ? l..e:

? ? ? ? &:引用模式匹配整個(gè)串

? ? ? ? 也支持后向引用

? ? ? ? -i:直接修改原文件

? ? ? ? -e script? -e? script:可以同時(shí)執(zhí)行多個(gè)腳本

? ? ? ? -f /PATH/TO/SED_SCRIPT:

? ? ? ? -r:表示使用擴(kuò)展正則表達(dá)式

練習(xí):將history中的空格刪除

? ? ? ? history | sed ‘s#[[:space:]]##g'

習(xí)題:1.刪除/etc/grub.conf文件中行首的空白符

sed? -r? 's@^ [[:space:]]+@@g'? /etc/grub.conf

? -r:表示使用擴(kuò)展正則表達(dá)式

? +:匹配其前字符至少1次

? ?g:全局替換

2.替換/etc/inittab文件中“id:3:initdefault:”一行中的數(shù)字為5;

sed? 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g'? /etc/inittab

????\(\) :分組

? ??\1:第一個(gè)左括號(hào)以及與之對(duì)應(yīng)得右括號(hào)包含得所有內(nèi)容

? ??\2:第二個(gè)左括號(hào)以及與之對(duì)應(yīng)得右括號(hào)包含得所有內(nèi)容

? ? [0-9]替換成5

3.刪除/etc/inittab文件中的空白行;

????sed? ?'/^$/d'? ?etc/inittab

? ???d:刪除符合條件的行

? ??^$:空白行

4.刪除/etc/inittab文件中開(kāi)通的#號(hào)

? ? sed? 's@^#@@g'? ?etc/inittab

????^:錨定行首,這個(gè)字符后面得字符串必須出現(xiàn)在行首

5.刪除某文件中開(kāi)頭的#號(hào)及后面的空白字符,但要求#號(hào)后面必須有空白字符;

? ? sed? -r? 's@#[[:space:]]+@@g'? ?/etc/inittab

? ???-r:表示使用擴(kuò)展正則表達(dá)式

? ??? +:匹配其前字符至少1次

6.刪除某文件中以空白字符后面跟#類(lèi)的行中開(kāi)頭的空白字符及#

? ? sed -r? 's@^[[:space:]]+#@@g'? ?/etc/inittab

7.取出一個(gè)文件路徑的目錄名稱(chēng);???

? ? echo? "/etc.rc.d" | sed -r? 's@^(/.*/)[^/]+/?@\1@'

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容