在字符替換中,可能會遇見引號,“/”等的替換,這時應(yīng)該注意,sed的命令原型是:
成都創(chuàng)新互聯(lián)公司2013年開創(chuàng)至今,先為汨羅等服務(wù)建站,汨羅等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為汨羅企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
sed -i "s/oldstring/goalstring/g" file
如果一個路徑是data/path/abc,現(xiàn)在要將此路徑換成一個字符串cde
但是這時跟在s后邊的其實是分隔符,用以將oldstring替換成cde;他可以使用任意字符,這時如果字符串中有“/”,就會發(fā)生混亂,在這個時候可以用#當(dāng)做分隔符,就變成
sed -i "s#abc#cde#g" file
這時如果abc中包含“/”就可以隨便替換了;
引號的替換:
需要將引號轉(zhuǎn)義,使用反斜杠“\”,比如替換" ' 'div' ' ",如果需要將它替換成‘div' ;可以使用sed -i s#\"\'\'#\'#g就能替換了。
路徑"../syslog/tmp/"替換為"/data/syslog/tmp”
首先要搞清楚,轉(zhuǎn)義符\的作用是消除有特殊含義字符的特殊意義,使其還原為普通字符。
sed
-i
's/\.\.\/syslog\/tmp\//\/data\/syslog\/tmp/'
file.ini
點號.在正則表達(dá)式中有其特殊含義(表示任意一個字符),所以要表示點號本身,需要使用轉(zhuǎn)義符。
sed替換命令的格式一般為
s/.../.../
,所以如果里面的內(nèi)容也包含
/
,比如你這里的路徑,為了區(qū)分,也需要轉(zhuǎn)義。
最后說明一下,這樣看起來很混亂,比較容易搞錯。
其實sed的替換命令格式不一定要是
s/.../.../,下面這樣也都可以:
s#...#...#
s_..._..._
即命令s后可以跟任意字符,只要跟替換內(nèi)容不重復(fù)即可。這樣,路徑里的/就不再需要轉(zhuǎn)義了。
正斜杠,又稱左斜杠,符號是(/);反斜杠,也稱右斜杠,符號是(\)。
==============正斜杠(/)的作用:
1、作為路徑的分隔符,采用正斜杠(/),比如"/home/hutaow"
================反斜杠(\)的作用:
1、在正則表達(dá)式中,采用表達(dá)? \(\);\{m,n\};\?;\+
2、一個命令可以用(\)分成多行
3、作為轉(zhuǎn)義(\)使用
后續(xù)補(bǔ)充。。。。。
在linux命令前加上反斜杠,可以臨時取消使用別名。比如 \rm -rf
反斜杠是直接調(diào)用rm的原命令,為了保證你使用的命令不是各種系統(tǒng)別名,經(jīng)常會在命令前面加一個反斜杠來去除別名。
不是所有l(wèi)inux版本都這樣。RHEL5,6沒這個問題。
你的意思是多了一個"\"嗎? 你是在輸完ls $HOME再按tab鍵?