歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux常用命令:sed

Linux常用命令:sed

日期:2017/2/28 13:48:01   编辑:Linux教程

本文記錄的是自己在學習《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

Copyright © Linux教程網 All Rights Reserved