首頁 > 軟體

Linux常用命令:sed

2020-06-16 17:30:11

本文記錄的是自己在學習《Linux私房菜》中正規表示式的筆記。 

鳥哥的Linux私房菜-基礎學習篇(第四版)高清完整書籤PDF版 下載見Linux公社1號伺服器 http://www.linuxidc.com/Linux/2016-02/128220.htm

關於行尾符$

如果檔案本身沒有內容,比如使用touch新建的檔案,那麼$將會沒有意義。例如下面操作:

先使用touch新建了一個test.txt檔案,然後嘗試使用sed命令去在行尾增加內容,但是沒有成功(緊接著的cat命令沒有輸出任何東西),然後我使用vim給test.txt手動增加了一行內容“add by vim”,然後再使用同樣的sed命令就成功了,如後續cat命令輸出結果。

命令sed

sed是一個十分有用的管道命令,功能很多,而且都是用的比較多的場景。

sed [-nefri] [動作]

  • -n:安靜模式。預設情況下,所有向sed的stdin都會顯示在螢幕上,而若使用安靜模式,則只有經過sed特殊處理的行或者命令顯示在螢幕上
  • -e:直接在命令列模式上進行sed的動作編輯
  • -f:直接將sed的動作寫在一個檔案內,-f filename則可以執行filename內的sed動作
  • -r:使sed支援擴張正規表示式語法,預設為基礎正規表示式語法
  • -i:直接修改讀取的檔案內容,而不是在螢幕上輸出。預設是在螢幕上輸出,而原始檔不受影響

下面是動作說明,動作需要使用單引號‘’,且可以用兩個數位或者$來選擇進行動作的行數,‘[n1[,n2]]function’,比如'2,5d','2d','3,$d'這三種形式,分別表示選擇[2-5]行,第2行,[3-最後一行]。也可以使用正規表示式來選擇行,比如'/正規表示式/d',則將對符號正規表示式的行進行刪除動作。function有如下操作:

  • a:新增。在a的後面必須接字串,且不能全是空格的字串,表示在當前行的下一行寫入這些資料
  • c:替換。c的後面必須接字串,這些字串將替換n1,n2之間的行,即刪除行[n1,n2],然後在n1-1後面寫入這些字串
  • d:刪除。刪除行[n1,n2]
  • i:插入。i的後面必須接字串,這些字串將出現當前行的上一行
  • p:列印。將選擇的資料列印出來,就是顯示在螢幕上。通常與-n一起
  • s:替換。直接進行替換工作,可以使用正規表示式,例如'1,20s/old/new/g'

關於對function的作用範圍,測試表明:

  • 若沒有選擇,即例如‘a str’,對於a,d,i,p則表示選擇所有的行。而對於c,則並不是刪除所有行,然後只增加一行str,而是把所有行都替換為str
  • 如果有選擇則,即例如‘1a str’,'1,3a str','2,$a str','$a str','/正規表示式/a str';對於a,d,i,p則表示選擇這些行進行動作。而對於c,若是使用[n1[,n2]]形式選擇的行,則刪除全部行,再增加一行str;而若是使用正規表示式選擇的行,則是把選擇的每一行都替換成str!

     

  • 若檔案為空檔案,那麼這些功能都將無效果,包括增加類的命令a,i

使用a來增加多行:在每一行後面都必須使用反斜槓“”來進行新行的增加,例如:test.txt中本來只有一行:this is a test file.,然後使用a增加了三行

使用sed刪除空行:sed -i '/^$/d' filename,解釋:-i表示直接修改檔案而不在螢幕上顯示,/^$/使用的是正規表示式,在正規表示式中^表示行首,$表示行尾,行尾與行首之間沒有東西則是空行,d表示刪除。

sed命令有一個查詢替換功能:

sed 's/要被替換的字串/新的字串/g'    filename

其中,要“被替換的字串”是使用正規表示式的,而對於“新的字串”那肯定就是普通的字元。下面是我做的一些測試。

在sed命令中引入shell變數 http://www.linuxidc.com/Linux/2014-03/97896.htm

Linux下Shell程式設計——sed命令基本用法 http://www.linuxidc.com/Linux/2013-06/85526.htm

Unix文字處理工具之sed  http://www.linuxidc.com/Linux/2013-08/89315.htm

sed 高階用法 http://www.linuxidc.com/Linux/2014-09/106961.htm

sed命令詳解與範例 http://www.linuxidc.com/Linux/2014-11/109325.htm

Linux正規表示式sed 詳述  http://www.linuxidc.com/Linux/2015-04/116309.htm

Linux文字處理工具之sed  http://www.linuxidc.com/Linux/2015-01/111436.htm

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-10/136197.htm


IT145.com E-mail:sddin#qq.com