溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Linux sed使用的示例分析

發(fā)布時間:2022-01-21 10:35:25 來源:億速云 閱讀:142 作者:柒染 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)Linux sed使用的示例分析,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

sed 一種流向編輯器 stream editor,是Linux中三大文件處理工具(awk, sed, grep)之一,能配合正則表達(dá)式,對文件處理發(fā)揮重要作用。
sed 流式處理過程分成讀取,執(zhí)行,展示三個階段;

1. sed讀取是從輸入流(文件,管道,標(biāo)準(zhǔn)輸入)讀取一行并存儲到它叫模式空間pattern buffer中。

2. sed執(zhí)行,默認(rèn)情況下,所有的SED命令都在模式空間中順序的執(zhí)行,除非指定了行的地址,否則SED命令將會在所有的行上依次執(zhí)行。

3. sed 發(fā)送修改后的內(nèi)容到輸出流。在發(fā)送數(shù)據(jù)之后,模式空間將會被清空。在文件所有的內(nèi)容都被處理完成之前,上述過程將會重復(fù)執(zhí)行。

sed 以行為單位進(jìn)行文本處理,可以對數(shù)據(jù)進(jìn)行刪除,替換,新增,選取等,配合正則,功力大增,有沒有想一試身手呢,接下來我們就好好來盤一盤sed。

一.執(zhí)行流程示例
打印內(nèi)容

sed ” test  文件讀取到模式空間后,沒有任何腳本來處理,直接將模式空間內(nèi)容直接輸出到屏幕

接收輸入

sed ”   接收標(biāo)準(zhǔn)輸入的內(nèi)容,并進(jìn)行腳本處理,這里的腳本是空,所以不處理,直接輸出到屏幕

二.sed 的兩種執(zhí)行方式
sed [-n] [-e] 'command(s)' files

sed [-n] -f scriptfile files

第一種方式是在命令行中使用,第二種方式是在SED腳本文件中使用;兩種執(zhí)行方式可以同時使用。

文件:

$ cat test

aaa

ddd

222

sss

12ds45

方式一:

sed  -e ‘1d’ -e ‘2d’ -e ‘3d’ test

sss

12ds45

方式二:

echo -e "1d\n2d\n3d" > commands.txt

sed -f commands.txt test

sss

12ds45

三.sed 命令行參數(shù)
-n 默認(rèn)情況下,模式空間中的內(nèi)容在處理完成后將會打印到標(biāo)準(zhǔn)輸出,該選項用于阻止該行為

-e 指定要執(zhí)行的命令,使用該參數(shù),我們可以指定多個命令,讓我們打印每一行兩次:

sed -e ” -e ‘p’ quote.txt

-n, –quiet, –slient:與標(biāo)準(zhǔn)的-n選項相同

-e script,–expression=script:與標(biāo)準(zhǔn)的-e選項相同

-f script-file, –file=script-file:與標(biāo)準(zhǔn)的-f選項相同

–follow-symlinks:如果提供該選項的話,在編輯的文件是符號鏈接時,SED將會跟隨鏈接

-i[SUFFIX],–in-place[=SUFFIX]:該選項用于對當(dāng)前文件進(jìn)行編輯,如果提供了SUFFIX的話,將會備份原始文件,否則將會覆蓋原始文件

-l N, –line-lenght=N:該選項用于設(shè)置行的長度為N個字符

–posix:該選項禁用所有的GNU擴(kuò)展

-r,–regexp-extended:該選項將啟用擴(kuò)展的正則表達(dá)式

-u, –unbuffered:指定該選項的時候,SED將會從輸入文件中加載最少的數(shù)據(jù),并且更加頻繁的刷出到輸出緩沖區(qū)。在編輯tail -f命令的輸出,你不希望等待輸出的時候該選項是非常有用的。

-z,–null-data:默認(rèn)情況下,SED對每一行使用換行符分割,如果提供了該選項的話,它將使用NULL字符分割行

四. sed 基本命令
本章將會講解一些常用的SED命令,主要包括DELETE,WRITE,APPEND,CHANGE,INSERT,TRANSLATE,QUIT,READ,EXECUTE等命令

1.刪除 d

格式: [address1[,address2]]d

$: sed 'd' test.txt 刪除模式空間中的每一行,源文件不變

$: sed '4d' test.txt 刪除第四行

$: sed '4,9d' test.txt 刪除第四行到第九行

$: sed '/Time/,/Good/d' 刪除以Time 和Good開頭的行

2.替換 s

格式:[address1[,address2]]s/pattern/replacement/[flags]

sed 's/,/ | /g' test.txt    g:表示對所有內(nèi)容進(jìn)行替換

sed 's/,/|/ 2 ' test.txt     2: 表示只替換每行中第二個逗號

sed -n 's/genome/gene/p' test.txt   p: 只輸出改變的行

sed -n 's/genome/gene/w junk.txt' test.txt   w: 替換后輸出的內(nèi)容儲存到新的文件

sed -n 's/genome/gene/pi' test.txt             i: 匹配大小寫

3.寫入 w

格式:[address1[,address2]]w file

w 指定是寫命令, file 指的是存儲文件內(nèi)容的文件名。使用 file 操作符的時候要小心,當(dāng)提供了文件名但是文件不存在的時候它會自動創(chuàng)建,如果已經(jīng)存在的話則會覆蓋原文件的內(nèi)容。

$: sed -n 'w books.bak' books.txt  創(chuàng)建 books.txt的副本

4.正則表達(dá)式

^ 行首

$ 行尾

. 行單個字符(除行尾外)

[] 匹配字符集

[^]  排除字符集

[-]  字符范圍

? ,+ ,*   分別對應(yīng)0次到1次,一次到多次,0次到多次匹配

{n} ,{n,} ,{m, n}  精確匹配N次,至少匹配N次,匹配M-N次

| 或

\s 匹配單個空白內(nèi)容

\S 匹配單個非空白內(nèi)容。

\w , \W 單個單詞、非單詞。

5.常用代碼塊

a.除去空白行

$: echo -e "Line #1\n\n\nLine #2" | sed '/^$/d'

b.刪除連續(xù)空白行

$: echo -e "Line #1\n\n\nLine #2" | sed '/./,/^$/!d'

什么是Linux系統(tǒng)

Linux是一種免費(fèi)使用和自由傳播的類UNIX操作系統(tǒng),是一個基于POSIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng),使用Linux能運(yùn)行主要的Unix工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。

關(guān)于Linux sed使用的示例分析就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI