1. 程式人生 > >linux sed命令 + 高階SED 操作配置檔案

linux sed命令 + 高階SED 操作配置檔案

http://www.360doc.com/content/12/0209/14/8739082_185278180.shtml
上面的網址也有SED的 例子用法,更全 http://wenku.baidu.com/link?url=Ci_Bdi8nI4NbuEUPkHqGDVUyWBlJZT8I_Vq10gmAfIkO_A1ClWu2wFq7qb0vgOdsDXsLiNKLUpqk5K8Ja2GyytWD5bKD3NBVffxS37DDGo7
上面是   s​e​d​_​使​用​手​冊  包括如何刪除配置檔案中的#操作等 1。 替換 讓我們看一下 sed 最有用的命令之一,替換命令。使用該命令,可以將特定字串或匹配的規則表示式用另一個字串替換。下面是該命令最基本用法的示例:

?
$ sed -e 's/foo/bar/' myfile.txt
?
上 面的命令將 myfile.txt 中每行第一次出現的 'foo'(如果有的話)用字串 'bar' 替換,然後將該檔案內容輸出到標準輸出。請注意,我說的是每行第一次出現,儘管這通常不是您想要的。在進行字串替換時,通常想執行全域性替換。也就是說, 要替換每行中的所有出現,如下所示:
?
$ sed -e 's/foo/bar/g' myfile.txt
?
在最後一個斜槓之後附加的 'g' 選項告訴 sed 執行全域性替換。
?
關於 's///' 替換命令,還有其它幾件要了解的事。首先,它是一個命令,並且只是一個命令,在所有上例中都沒有指定地址。這意味著,'s///' 還可以與地址一起使用來控制要將命令應用到哪些行,如下所示:

?
$ sed -e '1,10s/enchantment/entrapment/g' myfile2.txt
?
上例將導致用短語 'entrapment' 替換所有出現的短語 'enchantment',但是隻在第一到第十行(包括這兩行)上這樣做。
?
$ sed -e '/^$/,/^END/s/hills/mountains/g' myfile3.txt
?
該例將用 'mountains' 替換 'hills',但是,只從空行開始,到以三個字元 'END' 開始的行結束(包括這兩行)的文字塊上這樣做。
?
關於 's///' 命令的另一個妙處是 '/' 分隔符有許多替換選項。如果正在執行字串替換,並且規則表示式或替換字串中有許多斜槓,則可以通過在 's' 之後指定一個不同的字元來更改分隔符。例如,下例將把所有出現的 /usr/local 替換成 /usr:

?
$ sed -e 's:/usr/local:/usr:g' mylist.txt
?
在該例中,使用冒號作為分隔符。如果不指定分隔符,則變成了如下:
$RUN_NAME="201302016stg02stability11"; sed -i 's/RUN_NAME=.*;/RUN_NAME="201302016stg02stability";/g' cap_stability_02.pl sed.sh file time=`date +%Y%m%d%H%M%S` sed -i 's/RUN_NAME=.*;/RUN_NAME="'$time'stg02performance";/g'  cap_stg02_perf.pl ############################################################ sed的一般使用方法網上很多,所以這裡只說說我遇到的使用變數的情況

變數中不包含特殊字元時,可以通過下面幾種方法來達到使用變數的目的:

1、將平常的單引號改為雙引號(Shell裡單引號中所有字元都作字面解釋):

       sed “s/mytext/$var/g” file

2、將一個單引號改為兩個:

      sed ‘s/mytext/’$var’/g’ file 或者 sed 's/'"$val"'//' urfile

      第一個可以理解成‘s/mytext/’和’/g’ 兩部分,中間的$var因為沒有'去掉其特殊意思,所以帶到了使用變數的目的; 第二個最裡面是",中間和最外層是',其實和第一個原理是一樣的,只是我認為比第一個要安全些。其實還有很多,可以參考十三問。

3、使用eval,如:

       eval sed 's/$a/$b/' filename

變數中包含特殊字元時:

        我遇到的情況是路徑字元 '/',比如處理PATH變數時, 可以將sed的/用#替代

        比如:

  sed "s#$a#$b#"

##############################################################

2 刪除
(1) sed -e '1d' inputfile (刪除第一行)
那麼刪除第x行呢?刪除第x1,x2,x3行呢?
sed -e 'xd' inputfile
sed -e 'x1d' -e 'x2d' -e 'x3d' inputfile
當然也許還有更好的辦法。

(2) sed -e '1,3d' file (刪除第一到第三行)
思考:刪除第n行到第m行?也就是
sed -e 'n,md' file
刪除第一行到最後一行
sed -e '1,$d' file     #$ 最後一行和一行的最後

(3) sed -e '/#/d' file  (刪除含有'#'號的行)
思考:刪除含有字母xx的行
sed -e '/xx/d' file
思考: 刪除除含有字串xx的所有行
sed -e '/xx/!d' file

(4) sed -e '/word1/, /word2/d' file  (刪除從含有單詞word1到含有單詞word2的行)
sed -e '10,/word1/d' file
刪除檔案中從第10行到含有word1的行
sed -e '/word1/,10/d' file
和上面的匹配相反,刪除從含有word1的行到第10行

(5) sed -e '/t.*t/d' file     (刪除含有兩個t的行)
思考:刪除含有指定正在表示式匹配的行。

3 文字的列印: p
基本格式:
[address1,[address2]] p

    (1) sed -e '/then/ p' filename  #列印所有行並重復列印含有then 的行
(2) sed -n '/then/ p' filename  #只打印含有then的行
(3) sed -e '1,3 p' filename     # 列印所有行並重復1-3行
(4) sed -n '1,3 p' filename     # 列印1-3行
(5) sed -n '/if/,/fi/ p' filename #列印字元if和fi之間的內容

    p函式為sed的列印函式,在這裡要注意-e 和-n 引數的區別。一般使用-n引數。