linux編程sed命令 linux sed指令

Linux 命令sed (文檔編輯)——想玩轉(zhuǎn)linux就請一直看下去

Linux 命令大全

站在用戶的角度思考問題,與客戶深入溝通,找到洛陽網(wǎng)站設(shè)計(jì)與洛陽網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、空間域名、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋洛陽地區(qū)。

Linux sed 命令是利用腳本來處理文本文件。

sed 可依照腳本的指令來處理、編輯文本文件。

Sed 主要用來自動(dòng)編輯一個(gè)或多個(gè)文件、簡化對文件的反復(fù)操作、編寫轉(zhuǎn)換程序等。

005 Linux 命令三劍客之-sed

三劍客各有所長,和鍋鍋一一搞起就是了!

使用示例:

使用示例:

使用示例:

sed [選項(xiàng)] s/[pattern]/[replace]/[flags]

[選項(xiàng)]常用的幾個(gè)參數(shù):

[pattern]

含義:待匹配的需要替換的內(nèi)容。

[replace]

常見的特殊含義字符:

[flags]

常見的可選參數(shù):

多個(gè)sed命令依次執(zhí)行,用分號(hào)分割或加選項(xiàng) -e,

使用示例:

把 test.html 文件中的第二個(gè) body 替換為 /body 。

分析實(shí)際就是把第二個(gè) body 替換為 /body,命令如下。

把 test.html 文件中的第二個(gè) body 替換為 /body 。

分析實(shí)際就是把第二個(gè) body 替換為 /body,命令如下。

編寫執(zhí)行腳本的步驟如下:

touch sed.sh

sed.sh 中寫入腳本內(nèi)容:

對sed.sh 腳本賦予可執(zhí)行權(quán)限

chmod ug+x sed.sh

執(zhí)行sed.sh 腳本,對文件進(jìn)行處理

sed -i -f sed.sh test.html

文本處理之sed

[root@www ~]# sed [-nefr] [動(dòng)作]

1 p命令 -打印

命令p用于顯示模式空間的內(nèi)容。默認(rèn)情況下,sed把輸入行打印在屏幕上,選項(xiàng)-n用于取消默認(rèn)的打印操作。當(dāng)選項(xiàng)-n和命令p同時(shí)出現(xiàn)時(shí),sed可打印選定的內(nèi)容。

sed '/my/p' datafile

sed -n '/my/p' datafile

命令d用于刪除輸入行。sed先將輸入行從文件復(fù)制到模式空間里,然后對該行執(zhí)行sed命令,最后將模式空間里的內(nèi)容顯示在屏幕上。如果發(fā)出的是命令d,當(dāng)前模式空間里的輸入行會(huì)被刪除,不被顯示。

sed '$d' datafile

sed '/my/d' datafile

sed 's/^My/You/g' datafile

sed -n '1,20s/My$/You/gp' datafile

sed 's#My#Your#g' datafile

-e是編輯命令,用于sed執(zhí)行多個(gè)編輯任務(wù)的情況下。在下一行開始編輯前,所有的編輯動(dòng)作將應(yīng)用到模式緩沖區(qū)中的行上。

sed -e '1,10d' -e 's/My/Your/g' datafile

r命令是讀命令。sed使用該命令將一個(gè)文本文件中的內(nèi)容加到當(dāng)前文件的特定位置上。

sed '/My/r introduce.txt' datafile

sed -n '/hrwang/w me.txt' datafile

a\ 命令是追加命令,追加將添加新文本到文件中當(dāng)前行(即讀入模式緩沖區(qū)中的行)的后面。所追加的文本行位于sed命令的下方另起一行。如果要追加的內(nèi)容超過一行,則每一行都必須以反斜線結(jié)束,最后一行除外。最后一行將以引號(hào)和文件名結(jié)束。

sed '/^hrwang/a\

i 命令是在當(dāng)前行的前面插入新的文本。

sed使用該命令將已有文本修改成新的文本。

該命令與UNIX/Linux中的tr命令類似,字符按照一對一的方式從左到右進(jìn)行轉(zhuǎn)換。例如,y/abc/ABC/將把所有小寫的a轉(zhuǎn)換成A,小寫的b轉(zhuǎn)換成B,小寫的c轉(zhuǎn)換成C。

sed '1,20y/hrwang12/HRWANG^$/' datafile

q命令將導(dǎo)致sed程序退出,不再進(jìn)行其它的處理。

sed '/hrwang/{s/hrwang/HRWANG/;q;}' datafile

sed -i 's/\t/,/g' filename //把tab 替換成 “,”

cat filename | sed 's/[ ][ ] /,/g' cat lse | sed 's/\s+/,/g' 替換空格

cat lse | sed -e 's/[[:space:]][[:space:]] /,/g' 如果空格與tab共存時(shí)用

1:把文件filename中的a字符換成A字符

sed -i "s/a/A/g" filename

2:替換為空格 將tab替換為空格

sed -i "s/\t/ /g" filename

二、實(shí)例

1)替換:s命令

將a.txt文件中所有行中的123用1234替換(-e表示命令以命令行的方式執(zhí)行;參數(shù)s,表示執(zhí)行替換操作)

把第一行的12替換成45

(-n)選項(xiàng)和p標(biāo)志一起使用表示只打印那些發(fā)生替換的行。也就是說,如果某一行開頭的test被替換成mytest,就打印它。(^這是正則表達(dá)式中表示開頭,該符號(hào)后面跟的就是開頭的字符串)(參數(shù)p表示打印行)

love被標(biāo)記為1,所有l(wèi)oveable會(huì)被替換成lovers,而且替換的行會(huì)被打印出來。需要將這條命令分解,s/是表示替換操作,love表示選中l(wèi)ove字符串,loveable/表示包含loveable的行,loveable/\l表示love字符串標(biāo)記為1,表示在替換過程中不變。rs/表示替換的目標(biāo)字符串。這條命令的操作含義:只打印替換了的行

不論什么字符,緊跟著s命令的都被認(rèn)為是新的分隔符,所以,“#”在這里是分隔符,代替了默認(rèn)的“/”分隔符。表示把所有10替換成100

表示直接操作文件test_sed_command.txt,將文件test_sed_command.txt中所有的now用right now替換。參數(shù)-i,表示直接操作修改文件,不輸出

將小數(shù)點(diǎn)及之后的內(nèi)容清除,以上輸出是112(.表示匹配"."符號(hào),之后跟著. 表示1個(gè)到多個(gè)字符,如果只是. 的話,只會(huì)匹配"."字符,因?yàn)?號(hào)是0個(gè)到多個(gè))

輸出:aaaa.mpg

表示被替換換字符串被找到后,被替換的字符串通過&符號(hào)連接給出的字符串組成新字符傳替換被替換的字符串,所有以wangpan開頭的行都會(huì)被替換成它自已加19850715,變成wangpan19850715

2)選定行范圍,逗號(hào)

將a.txt文件中的3行到5行之間所有行的后面添加一行內(nèi)容為4的行(參數(shù)a,表示添加行,參數(shù)a后面指定添加的內(nèi)容)

只打印包含love字符串行到包含unlove字符串行之間的所有行(確定行的范圍就是通過逗號(hào)實(shí)現(xiàn)的)

只打印從第五行開始到第一個(gè)包含以wang開始的行之間的所有行

3)編輯 e命令

一個(gè)比-e更好的命令是--expression。它能給sed表達(dá)式賦值。

(-e)選項(xiàng)允許在同一行里執(zhí)行多條命令。如例子所示,第一條命令刪除11至53行,第二條命令用pan替換wang。命令的執(zhí)行順序?qū)Y(jié)果有影響。如果兩個(gè)命令都是替換命令,那么第一個(gè)替換命令將影響第二個(gè)替換命令的結(jié)果。(參數(shù)d,表示刪除指定的行)

4)從文件讀寫:r命令和w命令

file里的內(nèi)容被讀進(jìn)來,顯示在與wangpan匹配的行后面,如果匹配多行,則file的內(nèi)容將顯示在所有匹配行的下面。參數(shù)r,表示讀出文件,后面空格緊跟文件名稱

在example.file中所有包含test的行都被寫入file里。參數(shù)w,表示將匹配的行寫入到指定的文件file中

5)追加和插入命令:a命令和i命令

'this is a example'被追加到以test開頭的行后面,sed要求命令a后面有一個(gè)反斜杠。

6)變形:y命令

把1-10行內(nèi)所有abcde轉(zhuǎn)變?yōu)榇髮懀⒁?,正則表達(dá)式元字符不能使用這個(gè)命令。參數(shù)y,表示把一個(gè)字符翻譯為另外的字符(但是不用于正則表達(dá)式)

7)保持和獲?。篽命令和G命令

首先了解參數(shù)h,拷貝匹配成功行的內(nèi)容到內(nèi)存中的緩沖區(qū)。在了解參數(shù)G,獲得內(nèi)存緩沖區(qū)的內(nèi)容,并追加到當(dāng)前模板塊文本的后面。上面命令行的含義:將包含old字符串的行的內(nèi)容保存在緩沖區(qū)中,然后將緩沖區(qū)的內(nèi)容拿出來添加到包含girl-friend字符串行的后面。隱含要求搜集到緩沖區(qū)的匹配行在需要添加行的前面

8)保持和互換:h命令和x命令

將包含test字符串的行的內(nèi)容保存在緩沖區(qū)中,然后再將緩沖區(qū)的內(nèi)容替換包含wangpan字符串的行。參數(shù)x,表示行替換操作。隱含要求搜集到緩沖區(qū)的匹配行在需要被替換行的前面

三、收集

2.#sed -e 's/123/1234/g' a.txt

將a.txt文件中所有行中的123用1234替換,每行匹配多次(-e表示命令以命令行的方式執(zhí)行;參數(shù)s,表示執(zhí)行替換操作;參數(shù)g,表示每行匹配多次,不改變原文件)

3.# sed -e '3,5 a4' a.txt

將a.txt文件中的3行到5行之間所有行的后面添加一行內(nèi)容為4的行(參數(shù)a,表示添加行,參數(shù)a后面指定添加的內(nèi)容,不改變原文件)

4.# sed -e '1 s/12/45/' a.txt

把第一行的12替換成45(不改變原文件)

5.#sed -i "s/456aaa/444aaa/" grep 456aaa -lr /mnt/

在/mnt/share目錄下所有的文件及所有子目錄下的文件中找出包括aaa456的文件(不包括文件夾),將找出來的文件中的456aaa替換成444aaa(-i表示直接改變文件)

6.#sed -n 's/^test/mytest/p' example.file

(-n)選項(xiàng)和p標(biāo)志一起使用表示只打印那些發(fā)生替換的行。也就是說,如果某一行開頭的test被替換成mytest,就打印它。(^這是正則表達(dá)式中表示開頭,該符號(hào)后面跟的就是開頭的字符串)(參數(shù)p表示打印行)

7.#sed 's/^wangpan/19850715/' example.file

表示被替換換字符串被找到后,被替換的字符串通過&符號(hào)連接給出的字符串組成新字符傳替換被替換的字符串,所有以wangpan開頭的行都會(huì)被替換成它自已加19850715,變成wangpan19850715

8.#sed -n 's/loveable/\1rs/p' example.file

love被標(biāo)記為1,所有l(wèi)oveable會(huì)被替換成lovers,而且替換的行會(huì)被打印出來。需要將這條命令分解,s/是表示替換操作,love表示選中l(wèi)ove字符串,loveable/表示包含loveable的行,loveable/\1表示love字符串標(biāo)記為1,表示在替換過程中不變。rs/表示替換的目標(biāo)字符串。這條命令的操作含義:只打印替換了的行,如果替換字符和被替換字符有部分內(nèi)容相同,則可用這種標(biāo)記方法

9.#sed 's#10#100#g' example.file

不論什么字符,緊跟著s命令的都被認(rèn)為是新的分隔符,所以,“#”在這里是分隔符,代替了默認(rèn)的“/”分隔符,但是在一個(gè)表達(dá)示中,不能把不同字符混合用作分隔符。表示把所有10替換成100。

10.#sed -n '/love/,/unlove/p' example.file

只打印包含love字符串行到包含unlove字符串行之間的所有行,如果找不到unlove,則一直到最后一行(確定行的范圍就是通過逗號(hào)實(shí)現(xiàn)的)

11.#sed -n '5,/^wang/p' example

只打印從第五行開始到第一個(gè)包含以wang開始的行之間的所有行

12.#sed '/love/,/unlove/s/$/jeffery/p' example.file

對于包含love字符串的行到包含unlove字符串之間的行,每行的末尾用字符串jeffery替換。

字符串$/表示以字符串結(jié)尾的行,$/表示每一行的結(jié)尾,s/$/jeffery/表示每一行的結(jié)尾添加jeffery字符串

13.#sed -e '11,53d' -e 's/wang/pan/' example.file

(-e)選項(xiàng)允許在同一行里執(zhí)行多條命令。如例子所示,第一條命令刪除11至53行,第二條命令用pan替換wang。命令的執(zhí)行順序?qū)Y(jié)果有影響。如果兩個(gè)命令都是替換命令,那么第一個(gè)替換命令將影響第二個(gè)替換命令的結(jié)果。(參數(shù)d,表示刪除指定的行)

14.# sed --expression='s/wang/pan/' --expression='/love/d' example.file

一個(gè)比-e更好的命令是--expression。它能給sed表達(dá)式賦值。

15.#sed '/wangpan/r file' example.file

file里的內(nèi)容被讀進(jìn)來,顯示在與wangpan匹配的行后面,如果匹配多行,則file的內(nèi)容將顯示在所有匹配行的下面。參數(shù)r,表示讀出文件,后面空格緊跟文件名稱

16.# sed -n '/test/w file' example.file

在example.file中所有包含test的行都被寫入file里。參數(shù)w,表示將匹配的行寫入到指定的文件file中

17.sed '/test/i\oh! My god!' example.file

'oh! My god!'被追加到包含test字符串行的前面,參數(shù)i表示添加指定內(nèi)容到匹配行的前面一行,sed要求參數(shù)i后面有一個(gè)反斜杠

18.#sed '1,10y/abcde/ABCDE/' example.file

把1—10行內(nèi)所有abcde轉(zhuǎn)變?yōu)榇髮?,注意,正則表達(dá)式元字符不能使用這個(gè)命令。參數(shù)y,表示把一個(gè)字符翻譯為另外的字符(但是不用于正則表達(dá)式)

19.#find . -name "*.log" -exec rm -f {} ;

查找當(dāng)前目錄及子目錄里所有的文件,刪除文件名以log為后綴的文件 -exec可以對find出來的結(jié)果執(zhí)行命令, {} ;代表find出來的結(jié)果,除了-name參數(shù)外,經(jīng)常用的還有:

1)-mtime,-ctime,atime都是指按時(shí)間查找,-mtime是文件的修改時(shí)間,-ctime是文件的創(chuàng)建時(shí)間,atime是后找開文件時(shí)間;

2)-type 指定查找的文件的類型,它有d,l,b,p,f,c等文件類型,d是查找目錄,l是查找鏈接檔,b是查找塊文件,p是查找管道文件,f是普通文件,c是字符設(shè)備文件;

3)-perm 0700 查權(quán)限為700的文件或目錄;

4)-size +512k 查大于512k的文件 ;-size -512k 查小于512k的文件;

5)-mtime +2 兩天以前修改過的文件; -mtime -2 兩天內(nèi)修改過的文件;-atime -2 兩天內(nèi)訪問過的文件;-ctime -2 兩天內(nèi)創(chuàng)建的文件

Linux中的sed是什么意思呢,簡單解釋一下啊

Sed是一項(xiàng)Linux指令,全稱是Stream

EDitor,功能同awk類似,差別在于,sed簡單,對列處理的功能要差一些,awk的功能復(fù)雜,對列處理的功能比較強(qiáng)大。Sed主要用于自動(dòng)編輯一個(gè)或者多個(gè)文件,多用于腳本中對文件的處理。

Sed命令可以對文件進(jìn)行增加、刪除、修改和查找操作,所以學(xué)好sed命令是寫自動(dòng)化腳本必須的基礎(chǔ)之一。

分享題目:linux編程sed命令 linux sed指令
當(dāng)前地址:http://www.muchs.cn/article22/hggscc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計(jì)公司、建站公司網(wǎng)站排名、軟件開發(fā)微信小程序、網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營