linux sed的詳細講解與使用方法

2021-09-24 02:39:03 字數 3022 閱讀 7965

1簡介

sed是乙個流編輯器。流編輯器用於對輸入流(檔案或來自管道的輸入)執行基本文字轉換。雖然在某些方面類似於允許指令碼編輯(例如ed)的編輯器,但 sed通過僅對輸入進行一次傳遞來工作,因此更有效。但是它sed能夠在管道中過濾文字,這特別區別於其他型別的編輯器。

2概述

例如,要替換所有出現的』你好』 至 '世界』在檔案中 input.txt中:

sed』s / hello / world /'input.txt> output.txt

如果您沒有指定inputfile,或者inputfile是- , sed過濾標準輸入的內容。以下命令是等效的:

sed』s / hello / world /『input.txt> output.txt

sed』s / hello / world /』output.txt

cat input.txt | sed』s / hello / world /』 - > output.txt

sed將輸出寫入標準輸出。使用-一世編輯檔案而不是列印到標準輸出。另請參閱用於將輸出寫入其他檔案的命令w和s///w命令。以下命令將修改file.txt的 並且不產生任何輸出:

sed -i』s / hello / world /'file.txt

預設情況下,sed列印所有已處理的輸入(已通過命令修改/刪除的輸入除外d)。使用-n抑制輸出,以及p列印特定行的命令。以下命令僅列印輸入檔案的第45行:

sed -n』45p』file.txt

sed將多個輸入檔案視為乙個長流。以下示例列印第乙個檔案的第一行(此時就把one.txt存檔)和最後乙個檔案的最後一行(three.txt)。使用-s 扭轉這種行為。

sed -n』1p; $ p』one.txt two.txt three.txt

沒有 -e 要麼 -foptions,sed使用第乙個非選項引數作為指令碼,使用以下非選項引數作為輸入檔案。如果-e 要麼 -foptions用於指定指令碼,所有非選項引數都作為輸入檔案。選項-e 和 -f可以組合,並且可以多次出現(在這種情況下,最終有效指令碼將是所有單個指令碼的連線)。

以下示例是等效的:

sed』s / hello / world /'input.txt> output.txt

sed -e』s / hello / world /'input.txt> output.txt

sed --expression ='s / hello / world /'input.txt> output.txt

echo』s / hello / world /』> myscript.sed

sed -f myscript.sed input.txt> output.txt

sed --file = myscript.sed input.txt> output.txt

3命令列選項

呼叫的完整格式sed是:

sed options … [script] [inputfile …]

sed 可以使用以下命令列選項呼叫:

–help

列印一條用法訊息,簡要總結這些命令列選項和錯誤報告位址,然後退出。

-n–quiet

–silent

預設情況下,sed列印出在通過指令碼每個週期結束時的模式空間(參見如何sed作品)。這些選項禁用此自動列印,sed僅在通過p命令明確告知時生成輸出。

–debug

以規範形式列印輸入sed程式,並注釋程式執行。

$ echo 1 | sed』\%1%s21232』

3$ echo 1 | sed --debug』\%1%s21232』

sed計畫:

/ 1 / s / 1/3 /

input:'stdin』第1行

模式:1

命令:/ 1 / s / 1/3 /

模式:3

end-of-週期:

3-e script

–expression=script

將指令碼中的命令新增到處理輸入時要執行的命令集中。

-f script-file

–file=script-file

將檔案指令碼檔案中包含的命令新增 到處理輸入時要執行的命令集中。

-i[suffix]

–in-place[=suffix]

此選項指定要就地編輯檔案。gnu sed通過建立臨時檔案並將輸出傳送到此檔案而不是標準輸出來完成此操作。1。

這個選項意味著 -s。

到達檔案末尾時,臨時檔案將重新命名為輸出檔案的原始名稱。擴充套件(如果提供)用於在重新命名臨時檔案之前修改舊檔案的名稱,從而製作備份副本2)。

遵循此規則:如果副檔名不包含a ,則將其作為字尾附加到當前檔名的末尾; 如果副檔名包含乙個或多個 字元,則每個星號將替換為當前檔名。這允許您為備份檔案新增字首,而不是(或除了)字尾,或者甚至將原始檔案的備份副本放入另乙個目錄(前提是該目錄已存在)。

如果未提供副檔名,則會覆蓋原始檔案而不進行備份。

因為 -一世 採用可選引數,不應該跟其他短選項:

sed -ei 『…』 file

與…一樣 -e -i 沒有備份字尾 - 檔案 將在不建立備份的情況下進行就地編輯。

sed -ie 『…』 file

這相當於 --in就地= e,創造 filee 作為備份 檔案

4引數的使用

sed -i 就是直接對文字檔案進行操作的

sed -i 『s/原字串/新字串/』 /home/1.txt

sed -i 『s/原字串/新字串/g』 /home/1.txt

這兩條命令的區別看示例吧

這是1.txt的內容

#cat 1.txt d ddd #ff

再看執行這兩條命令的區別

sed -i 『s/d/1234/』 /home/1.txt

執行結果

1234

1234dd

#fff

sed -i 『s/d/7523/g』 1.txt

執行結果

1234

123412341234

Linux sed命令詳細講解

sed使用引數 sed nefr 動作 選項與引數 n 使用安靜 silent 模式。在一般 sed 的用法中,所有來自 stdin 的資料一般都會被列出到終端上。但如果加上 n 引數後,則只有經過sed 特殊處理的那一行 或者動作 才會被列出來。e 直接在命令列模式上進行 sed 的動作編輯 f ...

UITableView的詳細講解

1.uitableview的初始化 csharp view plain copy uitableview tableview uitableview alloc initwithframe cgrectmake 0,0,320,420 tableview setdelegate self table...

axios的詳細講解

axios 是乙個基於promise 用於瀏覽器和 nodejs 的 http 客戶端,簡單的理解就是ajax的封裝。特性 1 利用npm安裝 例如vue腳手架專案中使用 npm install axios2 利用cdn 常用 src script 1 get請求 get請求方式一 axios 設定...