當(dāng)前位置:首頁 > 芯聞號(hào) > 充電吧
[導(dǎo)讀]一、概念sed為非交互式編輯器,可以文本文件和標(biāo)準(zhǔn)輸入進(jìn)行編輯,標(biāo)準(zhǔn)輸入可以是由鍵盤來輸入、文本重定向、字符串、變量甚至來自管道的文本;相對(duì)于vi編輯器sed一次性可以處理所有編輯任務(wù),顯得非常高效;

一、概念

sed為非交互式編輯器,可以文本文件和標(biāo)準(zhǔn)輸入進(jìn)行編輯,標(biāo)準(zhǔn)輸入可以是由鍵盤來輸入、文本重定向、字符串、變量甚至來自管道的文本;相對(duì)于vi編輯器sed一次性可以處理所有編輯任務(wù),顯得非常高效;sed一般使用于三種場(chǎng)合:

①編輯相對(duì)于交互式編輯器來說太大的文本;

sed [選項(xiàng)] ‘sed命令’ 輸入文件

②編輯命令太復(fù)雜,在交互式文本編輯器難以輸入的情況下;

sed [選項(xiàng)] -f sed腳本文件 輸入文件

③對(duì)文件掃描完畢但是需要執(zhí)行多個(gè)比編輯函數(shù)的情況;

./sed 腳本文件 輸入文件

二、sed命令選項(xiàng) 文件input的內(nèi)容: Tish is Cretificate Request file:
It should be send to renyunjun!
eMail:yunjun.ren@163.com;
company:tct?:

1、"-n"表示不打印文件的所有行;

例子:sed -n "3p" input 含義:打印出文件input中第三行的內(nèi)容;

sed "3p" input 含義:不僅打印出第三行,會(huì)將文件的所有內(nèi)容都打印出來,第三行會(huì)打印出2次;

sed -n "2,3p" input :打印出文件input內(nèi)容的第2、3行;

sed ?-n '/yunjun/p' input:打印出文件中與yunjun匹配的所有行;

2、sed "-e"向sed傳遞多個(gè)命令的時(shí)候“-e”才能有用武之地;sed匹配關(guān)鍵字也是大小寫敏感的;

sed -n -e '/yunjun/=' -e "/yunjun/p" input;

2
It should be send to renyunjun!
3
eMail:yunjun.ren@163.com;

3、sed "-f"只有調(diào)用sed腳本文件時(shí)才起作用,追加、插入、修改、刪除、替換等;

sed '/yunjun/aThis is sed append msg!' input;

在匹配行后增加該內(nèi)容:

Tish is Cretificate Request file:
It should be send to renyunjun!
This is sed append msg!
eMail:yunjun.ren@163.com;
This is sed append msg!
company:tct?

(1)追加定位文本

新建腳本文件:append.sed內(nèi)容如下:

/bin/sed -f?
/yunjun/a #a表示此處需要換行添加文本
This is sed append msg!. #.換行添加文本
Append another new line!.

./append.sed input

輸出:

Tish is Cretificate Request file:
It should be send to renyunjun!
This is sed append msg!.
Append another new line!.
eMail:yunjun.ren@163.com;
This is sed append msg!.
Append another new line!.
company:tct
②sed文本定位,匹配元字符,需要使用轉(zhuǎn)義符""來進(jìn)行屏蔽;

例子:sed -n '/./p' input

輸出:eMail:yunjun.ren@163.com;

③“$”在正則表達(dá)式表示行尾,但是在sed中表示文件的最后一行:

例子:sed -n '$p' input

輸出:company:tct?

例子:sed -n '/.*com/p' input

匹配包含有com的任意行

④!表示取反,x,y!表示匹配不在x~y行號(hào)之外的行;

例子:sed -n '2,4!p' input 打印出input 文件中2~4行之外的所有行內(nèi)容;

輸出:Tish is Cretificate Request file:
⑤打印與“should”匹配的行到最后一行的內(nèi)容:

sed -n '/should/,$p' input

輸出: It should be send to renyunjun!
eMail:yunjun.ren@163.com;
company:tct?

⑥sed -n '/should/,3p' input打印與should匹配的行到第三行之間的內(nèi)容;

輸出:It should be send to renyunjun!
eMail:yunjun.ren@163.com;

(2)插入、修改、替換文本等操作

①插入

#!/bin/sed -f
/yunjun/i
insert an new Line!.

輸出:Tish is Cretificate Request file:
insert an new Line!.
It should be send to renyunjun!
insert an new Line!.
eMail:yunjun.ren@163.com;

company:tct?

②修改

#!/bin/sed -f
/yunjun/c
find yunjun modify here!.
輸出:

Tish is Cretificate Request file:
find yunjun modify here!.
find yunjun modify here!.
company:tct

③替換

sed -n 's/yunjun/YUNJUN/p' input

輸出:

It should be send to renYUNJUN!
eMail:YUNJUN.ren@163.com;

將輸出內(nèi)容重定向到output中

sed -n 's/yunjun/YUNJUN/w output' input?

(3)寫入文件“w”

sed -n "1,4 w output" input

則output文件的內(nèi)容:

Tish is Cretificate Request file:
It should be send to renyunjun!
eMail:yunjun.ren@163.com;
company:tct

(4)從文本中讀取文件“r”

readfile文件中的內(nèi)容:

learn dan start?
day day up
come on

input中內(nèi)容:

Tish is Cretificate Request file:
It should be send to renyunjun!
eMail:yunjun.ren@163.com;
company:tct?

?sed '/on/r input' readfile 在input中的內(nèi)容讀取出來加在readfile文件中on的后面;

(5)退出命令“q”

sed '3 q' input?

輸出:

Tish is Cretificate Request file:
It should be send to renyunjun!
eMail:yunjun.ren@163.com;

(6)在定位行執(zhí)行命令組{x;y}

sed -n -e '/yunjun/p' -e '/yunjun/=' input

sed -n '/yunjun/{p;=}' input

輸出:

It should be send to renyunjun!
2
eMail:yunjun.ren@163.com;
3


二、awk命令選項(xiàng) 1、模式匹配


查找文件中空行,只要有一個(gè)空行就進(jìn)行一次打印This is a blank line!

#!/usr/bin/awk -f
/^$/{printf("This is a blank line!n")}

2、記錄和域

awk每個(gè)文件的輸入行定義為記錄,行中的每個(gè)字符串定義為域,域之間用空格、tab鍵或者其它符號(hào)進(jìn)行分割,分割域 的符號(hào)叫做分隔符;

awk定義域操作符"$"來指定執(zhí)行動(dòng)作的域,域操作符“$”后面跟數(shù)字或者變量來標(biāo)識(shí)域的位置;每一條記錄的域重1開始編號(hào),$1表示第一個(gè)域,$2表示第二個(gè)于,$0表示所有的域;

(1)awk打印域:

?awk '{print $1,$2,$3,$4}' stu_recored?

輸出:

Li Hao njue 025-9998768
wang hao dsf 035-8627898
zhang san sds 035-7654456
Li Si dfdfg 025-5364555

(3)域操作符"$"后面跟變量或者變量表達(dá)式

awk 'BEGIN {one = 1;two = 2}{print $(one+two)}' stu_recored?

打印輸出所有記錄的第三域:

輸出:

njue
dsf
sds
dfdfg

(4)awk默認(rèn)分隔符為空格鍵,將分割符由空格鍵改為Tab鍵,利用"-F"

awk -F"t" '{print $3}' stu_recored

輸出結(jié)果為:

025-9998768
035-8627898
035-7654456
025-5364555

由此可以得出分隔符是可以轉(zhuǎn)變的,不同的分割符可以將記錄分成不同的域;

awk還提供了另一種方法來改變分割符,環(huán)境變量FS;將源文件stu_recored修改為如下:

Li Hao,njue,025-9998768
wang hao,dsf,035-8627898
zhang san,sds,035-7654456
Li Si,dfdfg,025-5364555

awk 'BEGIN{FS = ","} {print $0}' stu_recored

輸出:

Li Hao,njue,025-9998768
wang hao,dsf,035-8627898
zhang san,sds,035-7654456
Li Si,dfdfg,025-5364555

(5)awk中關(guān)系運(yùn)算符

1、~匹配正則表達(dá)式;!~不匹配正則表達(dá)式

awk 'BEGIN{FS = ":"} $1~/root/' /etc/passwd

匹配passwd文件中用:分割的域并匹配root的行打印出來;

2、awk中有if/if else/if else else三中條件語句

awk 'BEGIN {FS = ":"}{if($3>$4) print $0}' /etc/passwd

awk 'BEGIN {FS = ":"}{if(($3==117)||($4==15)) print $0}' /etc/passwd

3、表達(dá)式

awk變量的定義和賦值:

x = 1

y = "Good"

z = "very" "good"

分別將x,y,z賦值為:1,Good,very good

例子:打印input中的空行數(shù)

awk '/^$/{print x+=1}' input?

例子,計(jì)算平均成績(jī)

學(xué)生成績(jī)信息:

Li Hao,njue,025-9998768,89,67,98,78
wang hao,dsf,035-8627898,78,98,99,97
zhang san,sds,035-7654456,56,67,89,79
Li Si,dfdfg,025-5364555 ,78,89,83,92

腳本如下:

#!/usr/bin/awk -f
BEGIN {FS = ","}
{total = $4+$5+$6+$7
arv = total/4
print $1,arv}

執(zhí)行腳本輸出如下:

Li Hao 83
wang hao 93
zhang san 72.75
Li Si 85.5

(6)系統(tǒng)變量

awk定義了很多內(nèi)建變量用于環(huán)境設(shè)置,稱為系統(tǒng)變量;

awk 'BEGIN {FS=","} {print NF,NR,$0} END {print FILENAME}' stu_recored

打印出stu_recored文件中的每條記錄的域數(shù),文件的記錄數(shù)以及文件結(jié)尾時(shí)打印出文件名;

7 1 Li Hao,njue,025-9998768,89,67,98,78
7 2 wang hao,dsf,035-8627898,78,98,99,97
7 3 zhang san,sds,035-7654456,56,67,89,79
7 4 Li Si,dfdfg,025-5364555 ,78,89,83,92
stu_recored

(7)格式化輸出

awk一大功能是產(chǎn)生報(bào)表,報(bào)表要求按一定的格式輸出,awk定義了printf輸出語句,可以規(guī)定輸出的格式;

例子:參數(shù)是變量列表

awk 'BEGIN{FS = ","}{printf("%s,%dn",$1,$6)}' stu_recored

輸出:

Li Hao,98

wang hao,99
zhang san,89
Li Si,83


轉(zhuǎn)換為ASCII字符

awk 'BEGIN{printf("%cn",65)}'

輸出:A


轉(zhuǎn)換為浮點(diǎn)數(shù):

awk 'BEGIN{printf("%fn",2016)}'

輸出:2016.000000


格式輸出增加注釋:

awk 'BEGIN{FS = ",";print "namettTelphon"}{printf("%-15st%sn",$1,$3)}' stu_recored?

輸出:

name Telphon
Li Hao ? ? ? ? 025-9998768
wang hao ? ? ? 035-8627898
zhang san ? ? ? 035-7654456
Li Si ? ? ? ? ? 025-5364555

(8)內(nèi)置字符串函數(shù)

awk提供了強(qiáng)大的內(nèi)置字符串函數(shù),用于實(shí)現(xiàn)文本字符串的查找、替換、分割等;

①將zhang san替換成wang er,gsub(r,x)或gsub(r,x,w)分別是將x替換成r和在w中用x替換r;

Li Hao,njue,025-9998768,89,67,98,78
wang hao,dsf,035-8627898,78,98,99,97
zhang san,sds,035-7654456,56,67,89,79
Li Si,dfdfg,025-5364555 ,78,89,83,92

執(zhí)行:awk 'BEGIN{FS = ",";OFS = ","}{gsub(/zhang san/,"wang er",$1)}{print $0}' stu_recored

Li Hao,njue,025-9998768,89,67,98,78
wang hao,dsf,035-8627898,78,98,99,97
wang er,sds,035-7654456,56,67,89,79
Li Si,dfdfg,025-5364555 ,78,89,83,92

②index(r,x)返回x在r字符串第一次出現(xiàn)的位置:

awk 'BEGIN{FS = ","}{print index($1,"hao")}' stu_recored

輸出:

0
6
0
0

③length(s)返回s字符串長(zhǎng)度

awk 'BEGIN{FS = ","}{print length($1)}' stu_recored

輸出:

6
8
9
5

④match(s,t)測(cè)試s是否包含匹配t的字符串;

?awk 'BEGIN{print match("xhang san",/san/)}'

輸出:7

⑤sub(r,x,w)將w中第一次出現(xiàn)r替換成x;

awk 'BEGIN{str = "";print sub(/hel/,"HEL",str);printf("%sn",str)}'

輸出:

1
HELlo world!

awk 'BEGIN{FS = ","}{$1~wang sub(/27/,"99",$0);print $0}' stu_recored?

輸出:

Li Hao,njue,025-9998768,89,67,98,78
wang hao,dsf,035-8699898,78,98,99,97
zhang san,sds,035-7654456,56,67,89,79
Li Si,dfdfg,025-5364555 ,78,89,83,92

⑥substr(r,s,t )返回字符串從s開頭長(zhǎng)度為t的字符串;

awk 'BEGIN{str = "helloworld!";print substr(str,6,6)}'

輸出:world!

(9)向awk腳本傳遞參數(shù);

#!/usr/bin/awk -f
NF!MAX
{printf("The line "NR" dose not have "MAX" filds!n")}

執(zhí)行:

./pass.awk MAX=7 FS="," stu_recored

輸出:

Li Hao,njue,025-9998768,89,67,98,78
The line 1 dose not have 7 filds!
wang hao,dsf,035-8627898,78,98,99,97
The line 2 dose not have 7 filds!
zhang san,sds,035-7654456,56,67,89,79
The line 3 dose not have 7 filds!
Li Si,dfdfg,025-5364555 ,78,89,83,92
The line 4 dose not have 7 filds!

在stu_recored每一條記錄前面增加行號(hào)并全部輸出:

awk 'BEGIN{FS=","}{print NR,$0}' OFS="." stu_recored

輸出:

1.Li Hao,njue,025-9998768,89,67,98,78
2.wang hao,dsf,035-8627898,78,98,99,97
3.zhang san,sds,035-7654456,56,67,89,79
4.Li Si,dfdfg,025-5364555 ,78,89,83,92

OFS="."定義的輸出輸出分隔符增加在NR和$0之間;


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉