sed命令替換字符串
使用sed命令可以直接替換文件中的字符串,在應用中比較普遍
替換字符串的一般格式爲:
sed 's/aaa/bbb/g'
其中s表示替換filename文件中每行的第一個匹配到的字符串,如果要替換前三行匹配到的字符串,可以修改成sed '3s/aaa/bbb/g',以此類推;
sed -i可以直接修改文件中的內容sed -i 's/aaa/bbb/g' filename
aaa、bbb可以修改爲變量,但需要用單引號擴起來sed -i 's/'$aaa'/'$bbb'/g' filename;
同時執行兩種替換規則sed -i 's/aaa/bbb/g;s/ccc/ddd/g' filename,中間用分號隔開;
如果替換到的字符串中包含和sed中一樣的分隔符,那麼就必須修改當前的分隔符。例如替換字符串中如果包含斜槓/,那麼命令要修改爲:sed -i 's#aaa#bbb#g' filename, #可以替換成其它的符號,以此類推,sed會把s後面的第一個字符作爲分隔符;
sed替換變量命令在網上搜羅一下大概有四種:
1、eval sed 's/$a/$b/g' filename
這個命令在實際運用中沒有使用過
2、sed "s/$a/$b/g" filename
這種方式把sed裏面的單引號改爲雙引號,從而可以直接使用變量,這種方式使用比較普遍
3、sed 's/'$a'/'$b'/g' filename
把變量名稱用單引號包裹起來,這種方式使用也較多
4、sed s/$a/$b/g filename
這個命令在實際運用中沒有使用過
需要注意的是,雙引號的拓展作用在使用變量時是無效的。例如在替換的字符串中如果包含斜槓"/",此時使用變量來替換就會出現問題,必須要修改sed的分隔符:
字符串aa="123abc/qqq"
sed -i "s/$aa/bb/g" filename
此時直接使用這個命令sed是會報錯的,即便給字符串aa加上轉義:aa="123abc\/qqq",把變量作爲整體也無效:
sed -i "s/${aa}/bb/g" filename
只能修改sed中的分隔符爲其它字符:
sed -i "s?$aa?bb?g" filename
這個時候就不會報錯了,sed的分隔符成了?,不會與字符串中的/衝突。