linux下sed 和 awk用法

2021-09-25 16:00:48 字數 4145 閱讀 2511

常用選項:

常用命令:

刪除某行

[root@localhost ruby] # sed '1d' ab #刪除第一行

[root@localhost ruby] # sed '$d' ab #刪除最後一行

[root@localhost ruby] # sed '1,2d' ab #刪除第一行到第二行

[root@localhost ruby] # sed '2,$d' ab #刪除第二行到最後一行

顯示某行

[root@localhost ruby] # sed -n '1p' ab #顯示第一行

[root@localhost ruby] # sed -n '$p' ab #顯示最後一行

[root@localhost ruby] # sed -n '1,2p' ab #顯示第一行到第二行

[root@localhost ruby] # sed -n '2,$p' ab #顯示第二行到最後一行

使用模式進行查詢

[root@localhost ruby] # sed -n '/ruby/p' ab #查詢包括關鍵字ruby所在所有行

[root@localhost ruby] # sed -n '/\$/p' ab #查詢包括關鍵字$所在所有行,使用反斜線\遮蔽特殊含義

增加一行或多行字串

[root@localhost ruby]# cat ab

hello!

ruby is me,welcome to my blog.

end[root@localhost ruby] # sed '1a drink tea' ab #第一行後增加字串"drink tea"

hello!

drink tea

ruby is me,welcome to my blog.

end[root@localhost ruby] # sed '1,3a drink tea' ab #第一行到第三行後增加字串"drink tea"

hello!

drink tea

ruby is me,welcome to my blog.

drink tea

enddrink tea

[root@localhost ruby] # sed '1a drink tea\nor coffee' ab #第一行後增加多行,使用換行符\n

hello!

drink tea

or coffee

ruby is me,welcome to my blog.

end代替一行或多行

[root@localhost ruby] # sed '1c hi' ab #第一行代替為hi

hiruby is me,welcome to my blog.

end[root@localhost ruby] # sed '1,2c hi' ab #第一行到第二行代替為hi

hiend

替換一行中的某部分

格式:sed 's/要替換的字串/新的字串/g' (要替換的字串可以用正規表示式)

[root@localhost ruby] # sed -n '/ruby/p' ab | sed 's/ruby/bird/g' #替換ruby為bird

[root@localhost ruby] # sed -n '/ruby/p' ab | sed 's/ruby//g' #刪除ruby

插入[root@localhost ruby] # sed -i '$a bye' ab #在檔案ab中最後一行直接輸入"bye"

[root@localhost ruby]# cat ab

hello!

ruby is me,welcome to my blog.

endbye

刪除匹配行

sed -i '/匹配字串/d' filename (注:若匹配字串是變數,則需要「」,而不是『』。記得好像是)

替換匹配行中的某個字串

sed -i '/匹配字串/s/替換源字串/替換目標字串/g' filename

awk ''
儘管操作可能會很複雜,但語法總是這樣,其中 pattern 表示 awk 在資料中查詢的內容,而 action 是在找到匹配內容時所執行的一系列命令。花括號({})不需要在程式中始終出現,但它們用於根據特定的模式對一系列指令進行分組。 pattern就是要表示的正規表示式,用斜槓括起來。

awk語言的最基本功能是在檔案或者字串中基於指定規則瀏覽和抽取資訊,awk抽取資訊後,才能進行其他文字操作。完整的awk指令碼通常用來格式化文字檔案中的資訊。

通常,awk是以檔案的一行為處理單位的。awk每接收檔案的一行,然後執行相應的命令,來處理文字。

ubuntu@ubuntu:~/chat-project/test$ last -n 5

ubuntu pts/9 192.168.43.254 sun jul 28 17:03 still logged in

ubuntu pts/9 192.168.43.254 sun jul 28 04:37 - 04:37 (00:00)

ubuntu pts/9 192.168.43.254 sun jul 28 04:37 - 04:37 (00:00)

ubuntu pts/9 192.168.43.254 sun jul 28 04:37 - 04:37 (00:00)

ubuntu pts/9 192.168.43.254 sun jul 28 04:37 - 04:37 (00:00)

ubuntu@ubuntu:~/chat-project/test$ last -n 5 | awk ''

ubuntu

ubuntu

ubuntu

ubuntu

ubuntu

ubuntu@ubuntu:~/chat-project/test$ head /etc/passwd | awk -f ':' ''

root

daemon

binsys

sync

games

manlp

mail

news

ubuntu@ubuntu:~/chat-project/test$ head /etc/passwd | awk -f ':' 'begin end '

hello world

root /bin/bash

daemon /usr/sbin/nologin

bin /usr/sbin/nologin

sys /usr/sbin/nologin

sync /bin/sync

games /usr/sbin/nologin

man /usr/sbin/nologin

lp /usr/sbin/nologin

mail /usr/sbin/nologin

news /usr/sbin/nologin

end

awk工作流程是這樣的:先執行beging,然後讀取檔案,讀入有/n換行符分割的一條記錄,然後將記錄按指定的域分隔符劃分域,填充域,$0則表示所有域,1表示

第乙個域

,1表示第乙個域,

1表示第乙個

域,n表示第n個域,隨後開始執行模式所對應的動作action。接著開始讀入第二條記錄······直到所有的記錄都讀完,最後執行end操作。

搜尋root所在的行

ubuntu@ubuntu:~/chat-project/test$ awk -f: '/root/' /etc/passwd

root:x:0:0:root:/root:/bin/bash

顯示root所在行的bash資訊

ubuntu@ubuntu:~/chat-project/test$ awk -f: '/root/' /etc/passwd

/bin/bash

awk和sed的常規用法

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

Linux下sed的用法

sed是乙個很好的檔案處理工具,本身是乙個管道命令,主要是以行為單位進行處理,可以將資料行進行替換 刪除 新增 選取等特定工作,下面先了解一下sed的用法 sed命令列格式為 sed nefri command 輸入文字 常用選項 n 使用安靜 silent 模式。在一般 sed 的用法中,所有來自...

Linux下Sed命令的用法

1.sed簡介 2.定址 可以通過定址來定位你所希望編輯的行,該位址用數字構成,用逗號分隔的兩個行數表示以這兩行為起止的行的範圍 包括行數表示的那兩行 如1,3表示1,2,3行,美元符號 表示最後一行。範圍可以通過資料,正規表示式或者二者結合的方式確定 3.sed命令 呼叫sed命令有兩種形式 se...