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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

菜鸟linux的sed,Linux sed命令菜鸟入门

發布時間:2024/9/27 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 菜鸟linux的sed,Linux sed命令菜鸟入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文首先以一個簡單的sed命令應用示例,說明如何使用sed命令進行文本處理,接著從sed命令的用法、工作原理、行地址模式以及sed命令支持的腳本命令詳細介紹sed命令的用法。

一個完整的sed命令使用簡單示例

現在有一個待處理文件test.txt,文件中包含一系列的位圖數據1和0,它們位于

和之間,需要將它們寫入一個單獨的文件,并使用.FG .FE替換著部分內容。替換輸入文件中的 標識為.LP并刪除其下的空行。最后,刪除輸入文件中的所有空行。

處理文件內容如下:cat test.txt

This?is?a?test?paragraph.

111111111111111101000000000000000000000000000000111111111111111111100000000

000000000000000000000000000000000001111111111111111111111111111111111111111

11111111111111111110000000000000000000

MOre?lines?of?text?to?be?found?after?the?figure.

These?lines?should?print.

sed腳本命令內容及解釋如下:cat sedscr

//{

N?????????????????????#讀入下一行,因為下一行為空行,

c\????????????????????#使用下面的內容替換模式空間中的內容,之所以使用N命令,也是想把下面的空行刪除

.LP

}

/

/,//{??????#匹配到行之間的內容

w?fig.test????????????????????????#將這部分中的當前模式空間中的內容寫入文件fig.test中,因為sed命令式按行讀取文件內容的

/

/i\??????????????????#在行前插入下面的內容

.FG\

\

.FE

d?????????????????????????????????#刪除匹配的行,即刪除模式空間中的內容,這樣模式空間中的這部分內容不會被輸出

}

/^$/d?????????????????????#刪除所有空行

sed腳本執行命令:sed -f sedscr test.txt

sed腳本執行完成后輸出內容如下:

.LP

This?is?a?test?paragraph.

.FG

.FE

.LP

MOre?lines?of?text?to?be?found?after?the?figure.

These?lines?should?print.

上面簡單演示了一個使用sed命令的實際例子,初學時看不懂沒有關系,只需知道大概是這么個流程,然后下面會詳細的解釋sed命令的用法。

sed命令用法

sed[選項]?{腳本 | 腳本文件}?[輸入文件],其中[?]表示可選,{}表示必須。

首先將3個經常出現的選項解釋如下:

-n, --quiet, --silent? ? ? ?? ? ? ? ? ? ? ? ? ?取消自動打印模式空間

-e 腳本, --expression=腳本? ? ? ? ? 添加“腳本”到程序的運行列表

-f 腳本文件, --file=腳本文件? ? ? ? ?添加“腳本文件”到程序的運行列表

上面出現了sed命令的三個最基本最常見的參數選項,其意思如下表所示:

-n選項

抑制sed命令的默認輸出

-e選項

后接單引號包含的命令腳本,僅應用單個命令于輸入文件時適用

-f 選項

指定一個文件包含多個腳本命令

這幾個選項的使用模式大致如下:

sed -n -e 'cmd_script' input_file ? ? ? ? ? #注意,單引號擴住腳本命令

sed -f script_file input_file ? ? ? ? ? ? ? ? ? ?#將腳本命令寫入一個單獨的文件

其實,sed命令的選項并不是學習sed命令的主要內容,主要內容是對于sed命令腳本部分的學習。sed支持的腳本命令比較多,后面會詳細介紹該部分內容,介紹sed支持的腳本命令之前,先介紹一下sed命令執行的原理。

sed工作原理

下面以sed -f script_file input_file為例,其工作原理如下圖所示:

其中input_file表示處理文件,script_file表示腳本命令。

工作原理如下:

a) 首先將處理文件的第一行讀入模式空間。

b) 接著對模式空間中的這一行內容執行腳本命令中設置的命令,從上至下依次執行腳本命令中設置的命令。

c) 腳本命令執行完成后,輸出模式空間中的內容。

d) 清空模式空間中得內容,并讀入處理文件中得第二行內容,并重復b) 和 c) 步驟的內容,直至處理完文件中的所有內容。

苦逼的碼農可以查看圖片右上角的偽代碼,可能解釋得更加清晰一點。

下面先對幾個經常出現的名詞進行解釋:

模式空間

以上描述中出現了一個詞叫模式空間,下面對其進行解釋。由于sed命令的執行并不修改原始文件,也就是說輸入文件是什么,執行完sed命令后,輸入文件沒有變化,這么說來,肯定不能在輸入文件的基礎上對其進行編輯,所以需要一塊單獨的空間,用于轉存文件中得內容,然后進行處理并輸出。模式空間就是這么一塊轉存輸入文件內容的空間,并且sed命令一次讀入輸入文件中得一行內容到模式空間,使用sed命令支持的腳步執行處理完模式空間中得內容后,輸出處理完的結果并刪除模式空間中得內容,準備讀入下一行輸入文件中得內容。

多行模式空間

如上所述,模式空間每次讀入輸入文件中的一行進行處理,有時只讀入一行內容到模式空間對輸入文件的處理能力很有限,比如它很難處理一個在一行末尾處開始,并在下一行開始處結束的短語。而多行模式空間就是為了解決這個問題而提出的,他允許將模式空間中的內容從一行擴展到多行。具體內容在本文后面會有講解。

保持空間

模式空間是容納當前輸入行的緩沖區,而保持空間是預留的一部分緩沖區,用于臨時存儲模式空間中的內容。模式空間中的內容可以復制到保持空間,保持空間中的內容也可以復制回模式空間。具體內容在本文后面會有講解。

sed命令的行地址模式

為什么需要行地址模式呢?因為并不是輸入文件中的每一行內容都需要被sed命令處理,sed命令當然只處理它感興趣的部分,于是需要使用行地址模式對要處理的行進行控制。

行地址是由斜杠、行號或者行尋址符號擴住的正則表達式描述。sed命令可以指定 0 或者 1 或者 2 個地址,每個地址都是一個描述模式、行號或者行選址符號的正則表達式。

1. 如果沒有制定地址,表示命令將應用于每一行。

2. 如果只有一個地址,表示命令將應用于與這個地址匹配的所有行。

3. 如果指定了由逗號分隔的兩個地址,表示命令應用于匹配第一個地址的第一性和它后面的行,直到匹配第二個地址的行(包含此行)。

4. 如果地址后面跟有感嘆號,表示命令將應用于不匹配該地址的所有行。

例:

a) [address]command

b) [line-address]command

c) address {

command1 ? ? #在command后面添加空格可能會產生意想不到的錯誤,建議每個command都單獨一行

command2

command3

} ?#右大括號必須單獨位于一行

sed命令支持的腳本命令

sed命令所支持的腳本命令很多,常見的腳本命令有s、d、p、n、i、a、c、y等。其中還包括與多行模式空間相關的N、D、P命令(均大寫)。與保持空間相關的h、H、g、G、x命令。

1. s命令(替換)

語法:[address]s/pattern/replacement/flags

解釋:替換命令應用于與address匹配的行(address的匹配見行地址模式一節),如果沒有指定address,就應用于與pattern匹配的所有行。

flags標注可能是以下幾種情況中得一種:

g: 對模式空間中所有出現匹配的情況均進行替換。沒有指定g時表示僅對第1次出現匹配的情況進行替換。

n: 1-512之間的一個數字,表示對當前模式空間中第n次出現所匹配部分的內容進行替換,其余所匹配部分的內容不變。

p: 打印模式空間中的內容。

w file: 將模式空間中的內容寫入file中。

換行符在計算機內部只是一個字符,所有正則表達式可以使用"\n"來匹配換行符。

replacement部分,下列字符具有特殊含義:

&: ?用正則表達式匹配的內容進行替換。

\n: 匹配第n個子串,這個子串以前在pattern中使用"\("和"\)"指定。

\: ?轉義字符,如上所述的&字符,在replacement中出現是就需要使用轉義字符。

例:

s/UNIX/\\s-&\\s0/g腳本將 on the UNIX OS 替換為 on the \s-UNIX\s0 OS,其中UNIX為正則表達式匹配的內容,替換replacement中的&字符。其中第一個"\"字符為轉義字符。

s!/usr/mail!/usr2/mail!g ? ?#定界符并不一定必須是"/",也可以選擇其他字符,如本例中使用"!"作為定界符。

有一個test.txt文件內容為first:second,現在想要將first和second替換位置。可以使用如下命令實現:

sed -e 's/\(.*\):\(.*\)/\2:\1/' test.txt ? ?#"\("、"\)"在pattern中指定了兩個子串,"\1"、"\2"表示匹配第1個和第2個子串。

2. d命令(刪除)

待續......

總結

以上是生活随笔為你收集整理的菜鸟linux的sed,Linux sed命令菜鸟入门的全部內容,希望文章能夠幫你解決所遇到的問題。

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