sed命令替換字符串

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的分隔符成了?,不會與字符串中的/衝突。

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