sed Shell 文字處理利器

2021-08-27 23:47:59 字數 4040 閱讀 1695

sed全稱是stream editor,是乙個用於文字過濾和替換的流編輯器,它是乙個管道命令,資料來源來自stdin,它的最小處理單位是行(與awk區分)。

語法如下:

sed [-nfri] [動作]

-n:使用安靜模式。只有經過sed處理的行才會輸出到螢幕上

-f:直接將sed的動作寫在乙個檔案內,-f filename 則可以執行filename內的sed動作

-r:切換為支援擴充套件正規表示式

-i:直接修改讀取的檔案內容,而不是由螢幕輸出

[動作]

[n1[,n2]]function

n1 n2表示應用sed的行數,可以不存在該引數

function引數說明:

a:新增,a的後面可以接字串,這些字串會出現在下一行(新行)

c:替換,c的後面可以接字串,這些字串將替換n1到n2之間的行

d:刪除,刪除n1到n2之前的行

i:插入,i的後面可以接字串,這些字串會出現在上一行(新行)

p:列印,也就是將某個選擇的資料列印出來。通常p會與sed -n一起使用

s:替換,如將1到20行之間的old替換為new:1,20s/old/new/g

測試文字的內容如下所示,建立乙個新檔案regular_express.txt,並將下面的內容拷貝到檔案中即可開始試驗:

not use feet only.

this dress doesn't fit me.

however, this dress is

about $ 3183 dollars.^m

gnu is free air not free beer.^m

her hair is very beauty.^m

i can't finish the test.^m

oh! the soup taste good.^m

motorcycle is cheap than car.

this window is clear.

the symbol '*' is represented as start.

oh! my god!

the gd software is a library for drafting programs.^m

you are the best is mean you are the no. 1.

the same with

"glad".

i like dog.

google is

the best tools for search keyword.

goooooogle yes!

go! go! let's go.

# i am vbird

使用sed刪除檔案的2,5行:

[nigel]$ nl regular_express.txt | sed '2,5d'

1"open source"

is a good mechanism to develop programs.

6 gnu is free air not free beer.^m

7 her hair is very beauty.^m

8 i can't finish the test.^m

如果要刪除第3行到最後一行,則可以這樣:

[nigel@/vbird_linux]$ nl regular_express.txt | sed '3,$d'

1"open source"

is a good mechanism to develop programs.

只刪除第2行:

[nigel@/vbird_linux]$ nl regular_express.txt | sed '2d'

1"open source"

is a good mechanism to develop programs.

3 football game is

not use feet only.

[nigel@/vbird_linux]$ nl regular_express.txt | sed '2a hello world'

1"open source"

is a good mechanism to develop programs.

hello world

3 football game is

not use feet only.

[nigel@/vbird_linux]$ nl regular_express.txt | sed '2i hello world'

1"open source"

is a good mechanism to develop programs.

hello world

3 football game is

not use feet only.

多行的插入比較特殊:

[nigel@/vbird_linux]$ nl regular_express.txt | sed '2i hello \

> world!'

1"open source"

is a good mechanism to develop programs.

hello

world!

3 football game is

not use feet only.

多行插入必須要加上\。

動作c可以將n1-n2行替換為指定的字串:

[nigel/vbird_linux]$ nl regular_express.txt | sed '2,5c hello world'

1"open source"

is a good mechanism to develop programs.

hello world

6 gnu is free air not free beer.^m

注意,是將n1-n2替換為一行,總行數會減少。

我們以前要列出11-20行需要這麼做「head -n 20 | tail -n 10」,這樣處理很麻煩。有了sed後,就可以簡單直接取出那幾行:

[nigel@ /vbird_linux]$ nl regular_express.txt | sed -n '11,15p'

11 this window

is clear.

12 the symbol '*'

is represented as start.

13 oh! my god!

14 the gd software is a library for drafting programs.^m

15 you are the best is mean you are the no. 1.

注意要與-n引數一起使用。

用法

sed 's/舊字串/新字串/g'
使用示例:

1"open source"

is a good mechanism to develop programs.

sed除了能從管道後去資料外,還能夠直接修改檔案!

[nigel@/vbird_linux]$ cat regular_express.txt

"open source"

is a good mechanism to develop programs.

football game is

not use feet only.

[nigel@/vbird_linux]$ sed -i '1,2d' regular_express.txt

[nigel@/vbird_linux]$ cat regular_express.txt

football game is

not use feet only.

不過該功能需要慎用,一旦修改過後就不能恢復。

awk基礎篇 Shell 文字處理利器

sed傾向於以行為單位進行處理,而awk更擅長將一行分為幾段進行處理。awk用法 awk 條件型別1 條件型別2 awk 條件型別1 條件型別2 filenameawk支援兩種資料 既可以通過管道獲取資料,也可以從檔案獲取資料。awk主要是處理每一行的字段內的資料,而預設的字段分割符為空格或tab。...

shell文字處理

最於檔案的操作以前都是用高階程式語言來操作的。今天恰好需要將乙個目錄中的檔案資訊儲存到sqlite3資料庫中 我用linux中的工具和shell來作為自己畢業設計做原型開發 下面記錄一下這裡用到的部分知識,以作備忘。用ls命令來說明 1.關於shell中的管道和重定向問題。這個知識基礎,這裡不再說了...

WML 文字處理

wml使用xml文件字符集,目前支援unicode 2.0,和hdml不同,wml的所有標籤,屬性和規定的可接收值必須小寫,card的名字和變數也是區分大小寫的。和hdml一樣,對於連續的空字元,只顯示乙個空格。標籤內屬性的值必須用 或者 括起來,屬性名,和值之間不能有空格。對於不成對出現的標籤,必...