執行命令如下時,總報extra characters at the end of command錯誤:
sed -i "s/192.168.0.2/192.168.0.3/g" *.rptdesign
原因:
unix與linux在執行sed指令時有些區別,-i指令後面多加一個""空白符即可,如
sed -i "" "s/192.168.0.2/192.168.0.3/g" *.rptdesign
附 sed用法:
sed [OPTION] [ACTION] [FILE]
action的部分基本上是這樣的:'[n1[,n2]]function',如果想要連續執行多個action的話那麼可以用-e引數。就是sed -e 'action1' -e 'action2'這樣的形式。也可以直接用分號:sed 'action1;action2'這樣的形式。
n1和n2為可選項,可以用數字或者^,$符號,代表某些特定的行(^表示首行,$的話表示最後一行),表示後面的function在指定的這一行或幾行之間展開。
而function有以下引數:
a:指append,後接上字串,意思是在指定行後面新加入一行,內容為a後面跟的字串。比如sed -i '2 a INSERTTEXT' test.txt就可以在test.txt現在的第二行後面加上一行,內容是"INSERTTEXT"
d:指delete,刪除指定一行或多行,注意d引數是跟在行號後面的,比如sed '2,5d' test.txt就是刪除了檔案中的第2至5行
i:指insert,後接上字串,和append相對,在指定行的上方加入一個新行
s:指substitute替換,最常用的一個引數,其基本格式是's/old/new/[n]',old是被替換的字串,new是新替換進的字串,而n是一個可選項,可以寫數字或者g。數字的意思是隻替換一行中的第n個old,而g是指替換全部old,如果寫了ng就是說替換第n個old之後到行末的所有的old
y:用引數y可以對原文進行字元級別的替換,y的用法和s類似,如'y/OLD/NEW/',相當於把原文中所有的O替換成N,L換成E,D換成W。顯然,要求OLD和NEW的長度應該相等,否則sed會報錯。
&:表示已經匹配到的字串,通常用在正則匹配中,比如's/正規表示式/&ok/g'表示把所有匹配正規表示式的字串後面都加上ok。
/:'/pattern/'的作用就是定位含有pattern的行。它可以替代n1,n2那樣死板的指定行的方法。比如sed '/pattern/!i INSERT'就是除了匹配到pattern的行,其餘地行在前面一行都插入內容為INSERT的一行新行。
!:寫在引數前面否定,比如'/pattern/!d'就是不刪除匹配到pattern的行
p:常用在s的最後引數位置,即's/old/new/p'的形式。這麼做可以讓sed在輸出顯示的時候只輸出被修改過的行。這麼做的話需要配上命令的引數-n,最後的命令應該是像
sed -n 's/old/new/p' test.txt這樣的形式。