sed和awk(烤紅薯真好吃啊!)

2021-10-13 00:17:00 字數 4671 閱讀 4810

awk編輯器

sed編輯器是一種流編輯器,流編輯器會在編輯器處理資料之前基於預先提供的一組規則來編輯資料流

sed編輯器可以根據命令來處理資料流中的資料,這些命令要麼從命令列中輸入,要麼儲存在乙個命令文字檔案中

在所有的檔案內容都被處理完之前,執行和顯示的流程將會依次重複進行,直至所有內容被處理完

sed

-e'操作'檔案1

檔案2..

.sed

-n-e

'操作'檔案1

檔案2..

.sed

-f指令碼檔案檔案1

檔案2..

.sed

-i-e

'操作'檔案1

檔案2..

.sed-e'

n'檔案1

檔案2..

.

s:替換,替換指定字元

d:刪除,刪除選定的行

a:增加,在當前行下面增加一行指定內容

i:插入,在當前行上面插入一行指定內容

c:替換,將選定行替換為指定內容

y:字元轉換,轉換前後的字元長度必須相同

p:列印,如果同時指定行,表示列印指定行;如果不指定行,則表示列印所有內容;如果有非列印字元,則以ascii碼輸出。通常與「-n」選項一起使用

=:列印行號

l:列印資料流中的文字和不可列印的asscii字元(比如結束符$、製表符

\t)

逐行讀取文字,預設以空格或tab鍵進行分隔,將分隔所得的各個字段儲存的內建變數中,並按模式或者條件執行編輯命令

sed命令常用於一整行的處理,而awk比較傾向於將一行分成多個「字段」然後再進行處理。awk資訊的讀入也是逐行讀取的,執行結果可以通過print的功能將字段資料列印顯示。再使用awk命令的過程中,可以使用邏輯操作符「&&」表示「與」、「||」表示「或」、「!」表示「非」;還可以進行簡單的數**算,如+-*/%^分別表示加、減、乘、除、取餘和乘方

awk

選項'模式或條件 '檔案1

檔案2..

.awk

-f指令碼檔案檔案1

檔案2..

.

fs:列分割符。指定每行文字的字段分隔符,預設為空格或者製表位。與「-f」作用相同

nf:當前處理的行的字段個數

nr:當前處理的行的行號$0

:當前處理的行的整行內容

$n:當前處理的行的第n個字段

filename:被處理的檔名

rs:行分隔符,awk從檔案上讀取資料時,將根據rs的定義把資料切割成許多條記錄,而wak一次僅讀入一條記錄以進行處理。預設值是

'\n'

awk

''shili2

#輸出所有內容

awk''

shili2

#輸出所有內容

awk'nr==1,nr==3'

shili2

#輸出第1~

3行的內容

awk'(nr>=1)&&(nr<=3)'

shili2

#輸出第1~

3行的內容

awk'nr==1||nr==3'

shili2

#輸出第

1行、第三行內容

awk'(nr%2)==1'

shili2

#輸出所有奇數行的內容

awk'(nr%2)==0'

shili2

#輸出所有偶數行的內容

awk'/^root/'

/etc/passwd

#輸出以root開頭的行

awk'/nologin$/'

/etc/passwd

#輸出以nologin結尾的行

awk'begin ;/\/bin\/bash$/;end '

/etc/passwd

#統計以

/bin

.bash

結尾的行數,等同於

grep

-c"/bin/bash$"

/etc/passwd

begin模式表示,再處理指定的文字之前,需要先執行begin模式中指定的動作;awk再處理指定的文字,之後再執行end模式中指定的動作,end語句塊中,往往會放入列印結果等語句

awk

-f":"

''/etc/passwd

#輸出每行中的第1、

3個字段

awk-f

":"'$3>5'

/etc/passwd

#輸出第三個欄位的值小於5的第

1、3個字段內容

awk-f

":"'!($3<200)'

/etc/passwd

#輸出第三個欄位的值不小於

200的行

awk'begin ;}'

/etc/passwd

#先處理玩begin的內容,再列印文字裡面的內容

awk-f

":"''

/etc/passwd

#輸出每行內容和行號,每處理完一條記錄,nr值加

1awk

-f":"

'$7~"/bash"'

/etc/passwd

#輸出以冒號分隔且第

7個字段中包含

/bash的行的第

1個字段

awk-f

":"'($1~"root")&&(nf==7)'

/etc/passwd

#輸出第

1個字段中包含root且有第

7個字段的行的第1、

2個字段

awk-f

":"'($7!="/bin/bash")&&($7!="/sbin/nologin")'

/etc/passwd

#輸出第

7個字段既不為

/bin

/bash,也不為

/sbin

/nologin的所有行

三元運算子:

awk

-f":"

'}'/etc/passwd

($3>$4)?$3:$4三元運算子,如果第三個欄位的值大於第四個欄位的值,則把第三個欄位的值賦給max,否則就把第四個欄位的值賦給max

echo

$path

|awk

'begin;end'

#統計以冒號分隔的文字段落數,end{}語句塊中,往往會放入列印結果等語句

awk

-f:'/bash$/'

/etc/passwd

#呼叫wc -l命令統計使用bash的使用者個數,等同於grep -c "bash$" /etc/passwd

free-m|

awk'/mem:/ '

#檢視當前記憶體使用百分比

top

-b-n1|

grep

cpu|

awk-f

','''

/awk

''

#檢視當前cpu空閒率,(-b -n 1表示只需要1次的輸出結果)

date

-d"$(awk -f "

." '' /proc/uptime) second ago"

+"%f %h:m:%s"

#顯示上次系統重啟時間,等同於uptime;second ago為顯示多少秒前的時間,+"%f %h:%m:%s"等同於+"%y-%m-%d %h:%m:%s"的時間格式

awk

'begin }'

awk

'begin } '

#呼叫hostname,並輸出當前的主機名

seq10|

awk''

seq10

|awk

''

輸出cpu使用率:

cpu_us=`

top-b-n1

|grep

cpu|

awk' '

cpu_sy=`

top-b-n1

|grep

cpu|

awk-f

','''

|awk''`

cpu_sum=$

(($cpu_us

+$cpu_sy))

echo

$cpu

sum

sed 和 awk 的運用

n 遮蔽預設輸出,預設sed會輸出讀取文件的全部內容 r 讓sed支援擴充套件正則 i sed直接修改原始檔,預設sed只是通過記憶體臨時修改檔案,原始檔無影響 sed n 3,6p etc passwd 答案 sed i s usr local usr src g file 答案 awk home...

awk和sed的常規用法

sed 的用法 sed編輯器稱作stream editor。如vim則是互動式文字編輯器。流編輯器就是在處理資料之前基於預先提供的一組規則來編輯資料。1.一次從輸入中讀取一行資料 2.根據所提供的編輯器命令匹配資料 3.按照命令修改流中的資料 4.將新的資料輸出到stdout 命令格式 set op...

sed和awk的常用例項

一 文字間隔 1 在每一行後面增加一空行 sed g guo.sh awk 2 將檔案中原來的空行刪掉,並在在每一行後邊增加一空行 sed d g awk 3在匹配式樣的行前插入一空行 sed good i sed hello awk 4 在匹配式樣的行後插入一空行 sed good a sed h...