Sed 基本用法

sedstream editor(流編輯器)的縮寫。其最常用的用法就是文本替換。


語法:sed [-nefr] [動作]

選項與參數:

  -n :使用安靜(silent)模式。在一般sed的用法中,所有來自STDIN的數據一般都會被列出到屏幕        上。但如果加上-n參數後,則只有經過sed特殊處理,顯示以p指定的行。

  -e :直接在指令列模式上進行sed 的動作編輯,當有多個編輯動作時,必須加上-e

  -f :直接將 sed 的動作寫在一個檔案內,-f filename則可以執行filename內的sed 動作

  -r sed的動作支持的是延伸型正規表示法的用法(預設是基礎正規表示語法)

  -i :直接修改讀取的檔案內容,而不是由屏幕輸出


動作說明:[n1[,n2]]function

  1. n1, n2 :在 10 20 行之間進行操作

  2. function

  3. a :新增,a的後面可以接字符串,而這些字符串會在新的一行出現(目前的下一行)

  4. c :取代,c 的後面可以接字符串,這些字符串可以叏代 n1,n2之間的行!

  5. d :刪除,因爲是刪除啊,所以 d 後面通常不接任何東東;

  6. i :插入,i 的後面可以接字符串,而這些字符串會在新的一行出現(目前的上一行);

  7. p :打印,亦即將某個選擇的數據印出。通常 p 會與參數 sed -n 一起運作

  8. s :取代,可以直接進行取代的工作,通常這個s的動作可以搭配正規表示法。例如:1,20s/old/new/g


例一:#替換gay爲boy,s表示替換

[root@localhost~]# echo  "he is a gay" | sed 's/gay/boy/'  

  1. he is a boy


例二:#-i表示將替換後的文本保存到原文件

[root@localhost~]# cat a

  1. he is a gay

[root@localhost~]# sed -i 's/gay/boy/' a                            

[root@localhost~]# cat a

  1. he is a boy


例三:#sed默認將每一行第一處符合樣式的內容替換,g表示替換每一處匹配到的文本

[root@localhost~]# sed 's/he/she/' a        

  1. she is a boy,but he is a gay

[root@localhost~]# sed 's/he/she/g' a      

  1. she is a boy,but she is a gay


例四:#ng表示從第n個符合的樣式處開始替換,忽略前n個匹配到的樣式.

[root@localhost~]# echo he he he he|sed 's/he/she/3g'

  1. he he she she

  2. /在sed中是一個定界符,我們也可以使用其他的定界符,有“@”,"|","#",“=”,";"(分號),“:”(冒號)

[root@localhost~]# echo he he he he|sed 's@he@she@4g'

  1. he he he she

[root@localhost~]# echo he he he he|sed 's:he:she:4g'

  1. he he he she

[root@localhost~]# echo he he he he|sed 's|he|she|4g'

  1. he he he she


其他用法:

  1. /d:表示刪除 ,以下用法表示刪除空白行

[root@localhost~]# echo -e "asd\n\nqwe\n\n123" | sed '/^$/d'

  1. asd

  2. qwe

  3. 123

  4. sed中,&表示匹配到的樣式的字符串,\w\+匹配每一個單詞,一下將匹配到的字符串用[]括起

[root@localhost]# echo "he is a gay! " |sed 's/\w\+/[&]/g'

  1. [he] [is] [a] [gay]!


例五:#\n:子串匹配標記 ,\0表示原字符串,\(和\)用於保存正則表達式的一部分,\1和\2用於回調保存的部分

[root@localhost~]# echo "is GAY" | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/'

  1. GAY is

[root@localhost~]# echo "is GAY" | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \0/'

  1. GAY is GAY

[root@localhost~]# echo "is GAY" | sed 's/\([a-z]\+\) \([A-Z]\+\)/\0 \1/'

  1. is GAY is



例六:#sed的-e,-n  選項用法,一般兩個會連用,再以-p輸出指定的行

[root@localhost ~]# sed -n -e 's/root/linux/g'  -e  1,3p /etc/passwd

  1. linux:x:0:0:linux:/linux:/bin/bash

  2. bin:x:1:1:bin:/bin:/sbin/nologin

  3. daemon:x:2:2:daemon:/sbin:/sbin/nologin



例七:#sed表達式通常使用單引號來引用,但如果使用表達式時則可使用“”其求值來對其進行擴展輸出

[root@localhost~]# a=hi

[root@localhost~]# echo hello  hi|sed "s/$a/hello/"

  1. hello hello



例八:#使用nq打印文件的n行

[root@localhost ~]# sed 3q  /etc/passwd

  1. root:x:0:0:root:/root:/bin/bash

  2. bin:x:1:1:bin:/bin:/sbin/nologin

  3. daemon:x:2:2:daemon:/sbin:/sbin/nologin


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章