linux sed 命令

sed命令是一個面向字符流的非交互式編輯器,也就是說sed不容許用戶與它進行交互操做。sed是按行來處理文本內容的。正則表達式

首先談一下sed經常使用的經常使用格式爲:sed[選項] [動做]編輯器

經常使用選項:spa

  -n:使用安靜(silent)模式。在通常sed的用法中,全部崽子STDIN的數據通常都會會被列出到終端上。但若是加上-n參數後,則只有通過sed特殊處理的那一行(或者動做)纔會被列出來。字符串

  -e:直接在命令列模式上進行sed的動做編輯。io

  -f:直接將sed的動做寫在一個文件內,-f filename則能夠運行filename內的sed動做。function

  -r:sed的動做支持是延伸性正規表示法的語法。(默認是正規表示法語法)。test

   -i:直接修改讀取的文件內容,而不是輸出到終端。sed

functionfile

  a:新增行,a的後面能夠是字串,而這些字串會在新的一行出現(目前的下一行)。搜索

  c:取代行,c的後面能夠接字串,這些字串能夠取代n1,n2之間的行。

  d:刪除行,由於是刪除,因此d後面一般不接任何參數,直接刪除地址表示的行。

  i:插入行,i的後面能夠接字串,而這些字串會在新的一行出現(目前的上一行)。

  p:列印,亦即將某個選項的數據印出。一般p會與參數sed -n一塊兒運行。

  s:替換,能夠直接進行替換的工做,一般這個s的動做能夠搭配正規表示法,例如1,20s/old/new/g通常是替換符合條件的字符串而不是整行。

通常function的前面會有一個地址的限制。例如[地址] function,表示咱們的動做要操做的行。下面咱們經過具體的離職直觀的看看sed的使用方法。

// test.txt  內容以下

11 aa

22 bb

33 cc

44 dd

55 2e

刪除行(不替換文件,只是打印到控制檯上面)

sed '1,2d' test.txt  表示刪除第1行到第2行的內容。

sed '1,$d' test.txt  表示刪除第1行到最後一行的內容。

sed '/2/d' test.txt  表示刪除包含2的全部行。

sed '/^2/d' text.txt  表示刪除以2開頭的全部行。

新增行(不替換文件,只是打印到控制檯上面)

sed '1a hello world' text.txt  表示在第1行的後面添加一行,添加的內容就是"hello world"。

sed '1i hello world' text.txt  表示在第1一行的前面添加一行,添加的內容是"hello world"。

替換行(不替換文件,只是打印到控制檯上面)

sed '1c hello world' text.txt  表示將第1行的內容替換爲"hello world"。

sed '/^2/c hello world' text.txt  表示將以2開頭的行所有替換爲"hello world"。

替換部分字符串而不是整行(不替換文件,只是打印到控制檯上面)

sed中除了上面的命令是針對證行進行操做的以外,還提供一個替換明明,該命令對某一行中的部分字符串進行操做,下面舉一個簡單的例子,仍是一樣的文本內容,執行下面的命令:

sed 's/aa/AA/' text.txt  表示將文件中的aa替換爲AA。s/待替換的字符串/新字符串/。這裏只置換每一行遇到的第一個aa。

sed 's/aa/AA/g' text.txt  表示將文件中的aa替換爲AA,加入g選項以後,表示爲全局替換。

sed '1s/aa/AA/g' text.txt  表示將文件中的第1行的aa進行替換。

sed '5,$s/aa/AA/g' text.txt  表示將文件中第5行到末尾進行替換。

sed '/^[0-9]/s/aa/AA/g' text.txt  表示將文件中以數字開頭的行進行替換操做。

搜索並輸出行內容(不替換文件,只是打印到控制檯上面)

sed -n '2p' text.txt  表示輸出第2行。

將修改應用到文件中(替換文件)

上面舉的例子都沒有修改文件裏面的內容,只是將修改結果打印到控制檯上面,而文件是沒有修改的。

咱們可使用-i選項告訴sed直接修改文件的內容,而不是將修改結果輸出到控制檯上面。

sed -i '2d' text.txt  結果以前文件中的第二行沒有了

sed正則中的元字符

咱們知道sed中的命令前面可使用地址範圍進行限制,表示對文件的某些符合條件的行執行相應的操做,其中咱們可使用正則表達式選出想要操做的行,而sed中的正則語法可能與其餘命令的正則語法有一些不一樣,這裏面咱們列出來sed中經常使用的正則。

$ 表示行尾

^ 表示行首

[a-z0-9] 表示字符範圍

[^]表示出了字符集中的字符之外的字符

sed 的正則中\(\)和{\m,n\}須要轉義

. 表示任意字符

* 表示零個或者多個

\+ 一次或者屢次

\? 零次或者一次

\| 表示或語法

相關文章
相關標籤/搜索