linux sed 命令

2021-12-29 西北偏北UP

sed命令整體可以幹嘛

總體而言,sed命令可以對文本進行查找、刪除、插入、替換等操作。它跟vim或者vi命令最大的去區別是,後者只能通過人工交互的方式,對文本進行處理。而很多時候,我們希望腳本自動化的進行文本處理,那麼sed無疑是我們的好幫手

命令簡介

sed OPTIONS [SCRIPT] [INPUTFILE...]

OPTIONS 用於指定對處理後的文本的一些輸出行為,比如-i,-n,後續會詳解

SCRIPT 定義實際的處理行為,比如想要查詢什麼、刪除什麼、插入什麼

INPUTFILE 這是具體要被處理的文本。文本還可以來自於管道符,於是命令格式形如下

echo "Welcome To The Geek Stuff" | sed 's/\(\b[A-Z]\)/\(\1\)/g'

樣例文本說明

為了方便對命令處理效果的說明,首先我們準備一個文本sed_learn.txt,其內容如下

unix is great os. unix is opensource. unix is free os.
learn operating system.
unix linux which one you choose.

查找

在script中,以p做為查找輸出命令,意即print

查找指定行數的內容並列印

列印1到2行的文本

sed -n '1,2 p' sed_learn.txt

輸出結果

unix is great os. unix is opensource. unix is free os.
learn operating system.

上述搜索列印使用到了參數-n,詳細講解見後面

查找指定關鍵字所在的行,並列印

列印包含unix關鍵字的行sed -n '/unix/p' sed_learn.txt,輸出結果如下

unix is great os. unix is opensource. unix is free os.
unix linux which one you choose.

其中兩斜槓/unix/ 中間,除了可以指定關鍵字,還可以指定正則表達式

插入插入空行

使用G表示插入空行

在每行後面插入空行

sed 'G' sed_learn.txt

結果如下

unix is great os. unix is opensource. unix is free os.

learn operating system.

unix linux which one you choose.

在每行後插入兩個空行 sed 'G;G' sed_learn.txt 結果如下為

unix is great os. unix is opensource. unix is free os.

learn operating system.


unix linux which one you choose.


```

在指定位置插入內容

在包含指定關鍵字的行後面插入新行 :sed '/love/G' sed_learn.txt表示在包含love的行後面插入新行

在指定位置插入空格:sed 's/^/ /' a.txt 表示在所有行前,插入5個空格,^表示行首

刪除

在script中指定d命令,表示對文本進行相關的刪除動作

刪除指定行

比如sed '1d' sed_learn.txt表示刪除第一行

刪除指定範圍的行

sed '1,2d' sed_learn.txt //表示刪除1到2行

sed '1,$d' sed_learn.txt //表示刪除1到最後一行

刪除最後一行

sed '$d' sed_learn.txt

搜索指定的位置的行

sed '/unix/d' sed_learn.txt //表示刪除所有包含unix的行

刪除所有空行

sed '/^$/d' sed_learn.txt

替換

替換命令的腳本格式一般為sed line_number1,line_number2 's/search_keyword_or_regular_express/string_for_replace/search_range_for_one_line'

search_keyword_or_regular_express 指定在一行中匹配的關鍵字或正則表達式

string_for_replace:指定匹配到後,替換的字符。

search_range_for_one_line:指定在一行中,搜索匹配的範圍。默認只對一行中第一次匹配到的內容進行替換

line_number1,line_number2 前面都是對具體某一行的匹配替換行為進行指定,這裡指定具體要對哪些行進行匹配替換

例如:sed '1,3 s/unix/linux/' sed_learn.txt 表示,將1到3行中的第一次匹配到unix的地方,替換成linux

例如:sed '1,3 s/unix/linux/g' sed_learn.txt 表示,將1到3行中的所有匹配到unix的地方,替換成linux

給文本編號

給所有行編號:sed = sed_learn.txt | sed 'N;s/\n/\t/' , 其中等號=是給文本每行前面插入一個帶數字的行,由於換行了,所以管道符後面將換行符\n變成了制表符\t。當然我們可以直接換成空格sed = sed_learn.txt | sed 'N;s/\n/ /

給非空行編號:sed '/./=' a.txt | sed '/./N; s/\n/ /',通過/./匹配到所有非空的行,然後使用=編號。最後,再將換行符\n替換成空格

多命令模式

在script中,可以指定多組命令,用分號隔開就行

比如sed 'G' sed_learn.txt,表示插入一個空行 而sed 'G;G' sed_learn.txt 表示插入兩個空行

一些option參數就地修改-i

前面講的所有查詢、刪除、替換,都是直接將處理結果輸出到終端,為了保留這些處理結果,我們可以使用重定向到某個文件進行保存,比如sed '/unix/d' sed_learn.txt > result.txt。但我們也可以通過指定-i 參數,直接將修改後的結果,更新到原文件,這裡的-i代表in place即為就地的意思

例如sed -i '1,$ s/unix/linux/g' sed_learn.txt 會將sed_learn.txt的內容,直接更新為如下

linux is great os. linux is opensource. linux is free os.
learn operating system.
linux linux which one you choose.

只輸出匹配到的文本-n

默認情況下,p指令會將所有文本列印出來,並將匹配到文本進行重複列印。比如執行sed '1,2 p' sed_learn.txt, 其結果如下,

unix is great os. unix is opensource. unix is free os.
unix is great os. unix is opensource. unix is free os.
learn operating system.
learn operating system.
unix linux which one you choose.

可以看到,它不光把第三行的內容也輸出了,還把1,2行進行了重複列印。而-n則可以只列印匹配到的內容,且不重複

總結

基本上,sed命令,都是先定位到某行,或某行的某個位置,然後進行相應的處理。除此之外,還需要指定具體要對那些行進行前述處理

參考資料

https://www.geeksforgeeks.org/sed-command-in-linux-unix-with-examples/

https://www.geeksforgeeks.org/sed-command-linux-set-2/

相關焦點

  • Linux常用命令 - sed
    使用 sed 搜索和替換文本的一般形式如下:sed -i 's/SEARCH_REGEX/REPLACEMENT/g' INPUTFILE-i 將其輸出寫入標準輸出seds 替代命令,可能是 sed 中使用最多的命令-/分隔符字符。
  • Linux 三劍客 Awk、Sed、Grep 命令詳解
    8  redhatsed -e '2,6d' -e 's/linux centos6.8/Linux Centos6.8/' testthis is a test fileLinux Centos6.8redhat#如果兩條命令功能一樣,那麼就需要用到下面的參數sed --expression='s/linux centos6.8
  • Linux||sed命令使用講解
    處理時,sed 會把要處理的行存儲在緩衝區中,接著用 sed 命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。接著處理下一行,這樣不斷重複,直到文件末尾。這個緩衝區被稱為「模式空間」(pattern space)。
  • Linux sed命令詳解
    -e :直接在命令列模式上進行 sed 的動作編輯;-f :直接將 sed 的動作寫在一個文件內, -f filename 則可以運行 filename 內的 sed 動作;-r :sed 的動作支持的是延伸型正規表示法的語法。(默認是基礎正規表示法語法)-i :直接修改讀取的文件內容,而不是輸出到終端。
  • Linux sed命令
    命令是利用腳本來處理文本文件。 [root@hadoop01 root]$ nl passwd | sed '/root/d'      2 bin:x:1:1:bin:/bin:/sbin/nologin6、數據的搜尋並執行命令6.1 搜索passwd,找到root對應的行,執行後面花括號中的一組命令
  • Linux | Linux 中使用 find 與 sed 批量替換字符串
    作者:春江暮客原文:https://www.bobobk.com/458.html在 linux 批量替換字符串怎麼辦,一開始想著直接用 sed 帶 -r 之類的迭代式的方法來替換,但是發現 sed 沒有迭代的參數,只能配合使用 find 來獲取文件再利用 sed 來進行替換。
  • linux文本處理三劍客之sed增刪改查
    收錄於話題 #linux 「sed(stream editor, 流編輯器)是linux下非常強大的非交互式的文本編輯器,主要功能是對文本的每一行數據進行匹配後操作,比如按行、按欄位
  • 一些命令行小技巧:wc、sort、sed 和 tr | Linux 中國
    讓我們來看看一些命令行實用工具,當你熱衷於終端而不是 GUI 時,它們可能更順手。我們都知道在一個系統上使用終端會更高效。當你編輯和排版一個文本文件時,終端會讓你確切的感受到,生活如此簡單。本文將向你介紹 wc、sort、tr 和 sed 命令。wcwc 是一個實用工具,全稱是 「word count」。
  • LFCS 系列第一講:如何在 Linux 上使用 GNU sed 等命令來創建、編輯和操作文件
    # sed -n '/^Jun  8/ p' /var/log/messages | sed -n 1,5p請注意,在默認的情況下,sed 會列印每一行。我們可以使用 -n 選項來覆蓋這一行為並且告訴 sed 只需要列印(用 p來表示)文件(或管道)中匹配的部分(第一個命令中指定以「Jun 8」 開頭的行,第二個命令中指定一到五行)。
  • Linux必知必會sed命令教程
    -e,如果需要用 sed 對文本內容進行多種操作,則需要執行多條子命令來進行操作;-i,默認 sed 只會處理模式空間的副本內容,不會直接修改文件,如果需要修改文件,就要指定 -i 選項;-f,如果命令操作比較多時,用 -e 會有點力不從心,這時需要把多個子命令寫入腳本文件,使用 -f 選項指定執行該腳本;-r:如果需要支持擴展正則表達式,那麼需要添加
  • 詳解Linux命令--sed語法和實例講解
    概述sed命令是一個面向字符流的非交互式編輯器,也就是說sed不允許用戶與它進行交互操作。sed是按行來處理文本內容的。在shell中,使用sed來批量修改文本內容是非常方便的。sed命令的選項語法:sed [選項] [動作]選項與參數:
  • 如何使用Linux sed命令進行字符串替換
    Linux中sed命令功能強大,本文將詳細介紹如何使用sed命令進行字符串替換。一、基本的替換命令格式1:sed 's/原字符串/新字符串/' 文件命令格式2:sed 's/原字符串/新字符串/g' 文件這兩種命令格式的區別在於是否有個「g」。沒有「g」表示只替換第一個匹配到的字符串,有「g」表示替換所有能匹配到的字符串,「g」可以認為是「global」(全局的)的縮寫,沒有「全局的」結尾就不要替換全部,這樣就好記啦。
  • Linux 上 12 個高效的文本過濾命令
    $ man awk2、 sed 命令sed[3] 是一款過濾和轉換文本的強大的流編輯器。我們已經寫了兩篇關於 sed 的有用的文章,你可以通過這兒來了解:sed 的 man 手冊已經添加控制選項和說明:$ man sed3、 grep、 egrep、 fgrep、 rgrep 命令行這些過濾器輸出匹配指定模式的行。它們從一個文件或者標準輸入讀取行,並且輸出所有匹配的行,默認輸出到標準輸出。
  • 海量數據處理之cut、awk、sed命令詳解,數據分析必備技能,不難
    數據都存儲在文件中,文件中肉眼可見的數據無非就是各種有規則的字符的組合,比如日誌文件,小文件我們還可以認真閱讀,但是給你一個10M大小的數據文件,不亞於閱讀一本小說,更何況密密麻麻都是數據,我們可以通過cut、awk、sed這三個命令從規則文件中提取符合我們需要的數據,重要的是他們的運行速度非常的塊。
  • Linux命令之六 cut命令
    收錄於話題 #linux
  • 面試題linux命令之awk
    無論是在測試還是開發崗位的面試招聘中,都會被提問到:是否了解linux系統,經常使用linux命令有哪些,接著可能會出一道題目,找出下列文本中的哪些值
  • Linux常用命令 awk 入門基礎教程
    在使用awk命令的過程中,可以使用邏輯操作符「&&」和「||」;也可以進行簡單的數學運算,如+ 、-、、/、%、^分別表示加、減、乘、除、取餘、乘方。**awk從輸入文件或者標準輸入中讀入信息,與sed一樣,信息的讀入也是逐行讀取的。不同的是,awk命令將文本文件中的一行視為一個記錄,而將一行中的某一部分(列)作為記錄的一個欄位。
  • linux命令大全
    Linux命令大全之所以有存在的必要就是因為,linux作為非主流市場裡面的主流作業系統,不僅是免費的而且它還是一個非常優秀的作業系統,與MS-WINDOWS相比,可靠、 穩定、速度快。且擁有豐富的根據UNIX版本改進的強大功能。
  • 【Linux】常用命令之 awk 常用實例
    在使用awk命令的過程中,可以使用邏輯操作符「&&」和「||」;也可以進行簡單的數學運算,如+ 、-、、/、%、^分別表示加、減、乘、除、取餘、乘方。**awk從輸入文件或者標準輸入中讀入信息,與sed一樣,信息的讀入也是逐行讀取的。不同的是,awk命令將文本文件中的一行視為一個記錄,而將一行中的某一部分(列)作為記錄的一個欄位。
  • sed命令的基礎知識及簡單應用
    Sed是一Linux命令,全稱:Stream Editor,功能和awk類似,但是沒有awk功能強大,相對簡單,awk處理列的功能比awk差很多。Sed主要用於自動編輯一個或者多個文件,多用於腳本中對文件的處理。Sed命令對文件的進行增加、刪除、修改和查找操作,所以是學好sed命令是寫自動化腳本必須的基礎之一。