2014年3月30日 星期日

使用sed替換命令s(ubstitute)時改變內定分隔符號的用途

標準的sed替換命令的格式是:
sed 's/PATTERN/REPLACEMENT/g' 

意思是把字串pipe進去處理時, 將字串中的PATTERN換成REPLACEMENT
其中/這個分隔符號是可以換的, 作法就是直接換, 像這樣
sed 's#PATTERN#REPLACEMENT#g'

讀書的時候對這個功能的用途感到很不解,
後來有一天讀named的chroot init script, 裏頭有一段是這樣

ROOTDIR=`echo $ROOTDIR | sed 's#//*#/#g;s#/$##'`;

用途是為了去掉ROOTDIR中重複或是出現在尾端的/號,
不換掉分隔符號的話就得寫成這樣

ROOTDIR=`echo $ROOTDIR | sed 's/\/\/*/\//g;s/\/$//'`;

方才恍然大悟, 難怪當年寫路徑置換寫到昏頭轉向,
換個分隔符號看起來就簡單多了, 在處理路徑或是日期字串的時候好用

沒有留言:

張貼留言