日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sed-笔记

發布時間:2023/12/4 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sed-笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.sed腳本編程的方法論

1.???????? 在著手做之前要弄清楚想做什么。

2.???????? 明確地描述處理的過程。

3.???????? 在提交最終的改變之前反復測試這個過程。

1檢測腳本最好的方式,是使用不同的輸入樣本進行測試并觀察結果。

二.sed 的工作方式(原理)

sed 命令按順序逐行將文件讀入到內存中。它一次處理一行內容,以行為單位。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。期間還可以使用hold space的內存緩沖空間作為二級緩沖處理。默認輸出是將每一行的內容輸出到屏幕上(標準輸出)。

其中兩個重要的因素:第一,輸出可以被重定向到另一文件中,以保存變化;第二,源文件(默認地)保持不被修改。sed 默認讀取整個文件并對其中的每一行進行修改。不過,可以按需要將操作限制在指定的行上。

三.命令語法

sed [options] '{command}' [filename]

1.???????? 選項與參數:[-nefri]

-n ?:使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN 數據一般都會被列出到螢幕上。但如果加上 -n 參數后,則只有經過sed 特殊處理的那一行(或者動作)才會被列出來。

-e :直接在命令列模式上進行 sed 的動作編輯;

-f 直接將 sed 的動作寫在一個文件內, -f filename 則可以運行 filename sed 動作;

-r? sed 的動作支持的是延伸型正規表示法的語法。(默認是基礎正規表示法語法)

-i ?:直接修改讀取的文件內容,而不是由螢幕輸出。

2.???????? 命令說明:

sed '[address]function'

首先地址是可選的,地址范圍(address)可以用:

?

????????????? 表示所有行,命令應用于每一行。

例:d?????? ????刪除所有行。

n1???? ???????? 數字構成,單個數字(n1)表示單獨的一行。

例:1d??????????刪除第一行。

n1,[n2] ? ? ? ??用逗號分隔( n1,[n2] )的兩個行數表示以這兩行為起止的行的范圍。

例:10,20d????? 刪除1020行(包括第10和第20行)。

10,d ? ? ? ? ? ?刪除10行以上的所有行。

$???????????????尋址符號($)表示待處理文本的最后一行,與正則表達式中$(單個行結尾) ? ? ? ? ?不同。

?

例:$d??????????刪除最后一行。

?

!???????????????地址后跟 “!” 表示命令匹配該地址以外的所有行。

例:10!d????????刪除除了第10行以外的所有行。

RE????????????? 正則表達式作為地址提供,命令只影響與正則表達式匹配的行,正則表達式 ? ? ? ? ?必須封閉在斜杠”/“

例:/^$/d???????刪除所有空行。

常用動作有:

a :新增,a 的后面可以接字串,而這些字串會在新的一行出現(目前的下一行)。

例:sed? '2a string' ?filename

c? :取代,c 的后面可以接字串,這些字串可以取代 n1,n2 之間的行!

例:sed ?'2c string' ?filename

d :刪除,d 后面通常不接任何字符;

例:sed ?'2d' ?filename

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

例:sed ?'2i' ?filename

p :打印/列出,亦即將某個選擇的數據印出。通常 p 會與參數 sed -n 一起運行。

例:sed ?'2p' ?filename

r :?從文件中讀取,后面接文件名稱,一個腳本最多打開10個文件,文件不存在命令不會報錯。

格式為:[line-address]r file? ? ? ? ? ? ? //操作單行,不能處理范圍內的行。

例:sed '/test/r filename1' filename2 ? ? ? //filename1的內容被讀取出來,顯示在匹配的與test匹配的行的后面。

w : 將模式空間中內容寫到文件中,追加到文件中,不存在則創建。

格式為:[address]w file? ? ? ? ? ? ? ? ? ? //對行沒有限制,單行,多行都可以處理。

l : ?列表命令用于顯示模式空間的內容,將非打印的字符顯示為兩個數字的ASCII代碼。其功能類似于vi 中的列表命令(:l?

例:sed? -n l filename

y:? 轉換命令是特有的,按位置將字符串中abc每個字符,都轉換為xyz中的等價字符,在該地址范圍內的所有的a 都被替換成了 x ,而不管它后面有沒有b。

格式為:[address]y/abc/xyz/

例:sed y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ

s :替換,可以直接進行取代,通常這個 s 的動作可以搭配。

例:sed ?'s/old-value/new-value/g' filename

說明:將”old-value”字符替為”new-value”字符

詳細用法:

[address]s/pattern/replacement/flags

flags是:

n? ? ?1-512之間的一個數字,表示文本模式中指定模式n次出現的情況進行替換。

#cat quanju

1hang-1hang-1hang

2hang-2hang-2hang

例:sed ‘s/hang/@/2’ quanju

1hang-1@-1hang

2hang-2@-2hang

說明:替換每一行中第2個匹配的字符串。

g????對模式空間的所有出現的情況進行全局更改。而沒有g通常只有第一次出現的情況被替換。

例:sed ‘s/hang/@/g’ quanju

1@-1@-1@

2@-2@-2@

p ? ?(小寫p)打印模式空間的內容。

w? ? ? (小寫w)file 將模式空間的內容寫到文件file中。

3.???????? 命令行上3種方式書寫多重指令

a)???????? 分號分隔方式;

例: sed 's/old1/new1/; s/old2/new2/; s/old3/new3/' filename

b)???????? 每個指令前加 -e 參數;

例: sed -e 's/old1/new1/' -e 's/old2/new2/' filename

c)???????? bourne shell的分行指令功能;

單引號后RETURN,出現多行輸入提示符(>).????

說明:

Csh中不能使用,Csh中每個指令結尾使用分號,使用反斜杠(\)作為每一行的結束。

Bourne shell兼容的shell,如:ksh,bash,pdks,zsh則可以使用(' " ( { \)進行分行指令。

1# sed '

???? > s/old1/new1/

???? > s/old2/new2/

???? > s/old3/new3/' filename

轉載于:https://blog.51cto.com/horizon49/1048483

總結

以上是生活随笔為你收集整理的sed-笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。