日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Unix中選擇合適的字符串處理方式( 二 )


$expr “2009 : ‘..(..)’
在實(shí)現(xiàn)這個(gè)功能的時(shí)候 , 筆者使用了這個(gè)轉(zhuǎn)義字符 。這個(gè)正則表達(dá)式的含義就表示只考慮前面這個(gè)字符串的最后兩個(gè)字符 , 而忽略其他的字符 。若需要利用上面這個(gè)規(guī)則來(lái)進(jìn)行文件命令的話 , 只需要先利用這個(gè)命令截取年份的最后兩位 , 然后再把月份加上去即可 。上面的字符串2009系統(tǒng)工程師也可以使用變量來(lái)代替 。系統(tǒng)工程師需要注意的是這個(gè)正則表達(dá)式的書(shū)寫(xiě)方法 。在使用expr命令來(lái)對(duì)字符串進(jìn)行處理 , 其難點(diǎn)就在于這個(gè)正則表達(dá)式的書(shū)寫(xiě) 。通常情況下 , 只要合理編寫(xiě)這個(gè)正則表達(dá)式 , 則其字符串的處理功能 , 并不會(huì)比數(shù)據(jù)庫(kù)系統(tǒng)中字符串處理函數(shù)來(lái)的差 , 甚至有過(guò)之而不及 ?,F(xiàn)在的主要問(wèn)題是 , 由于經(jīng)驗(yàn)有限 , 系統(tǒng)工程師往往很難根據(jù)用戶需求來(lái)定義這個(gè)正則表達(dá)式 。就連筆者有時(shí)候也會(huì)在這里卡住 。如果系統(tǒng)工程師想要提高自己正則表達(dá)式的書(shū)寫(xiě)能力 , 那么多看看其他系統(tǒng)工程師書(shū)寫(xiě)的腳本 , 往往能夠在最短時(shí)間內(nèi)提高自己正則表達(dá)式的書(shū)寫(xiě)水平 。
三、修改文件的擴(kuò)展名 。
如現(xiàn)在操作系統(tǒng)中某個(gè)目錄下面有很多的sh文件(Unix系統(tǒng)中的配置文件 , 其實(shí)跟txt相同) 。現(xiàn)在系統(tǒng)工程師需要將這些sh文件的擴(kuò)展名改掉 , 全部改為txt 。雖然可以通過(guò)一個(gè)個(gè)的手工修改來(lái)實(shí)現(xiàn) , 但是處理起來(lái)的難度比較大 。
如果要實(shí)現(xiàn)批量更改文件擴(kuò)展名的話 , 則可以借助for等循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn) 。不過(guò)循環(huán)語(yǔ)句內(nèi)部的操作有兩種實(shí)現(xiàn)方式 。一是采用expr命令 。其實(shí)對(duì)文件名進(jìn)行操作 , 說(shuō)到底就是對(duì)字符串的操作 。因?yàn)槲募忠彩且环N字符串 。如系統(tǒng)工程師可以先利用expr命令截取字符串的功能 , 將擴(kuò)展名前面的字符串截取出來(lái) , 然后將其保存在一個(gè)變量中 , 如filenameshort 。然后再利用系統(tǒng)的重命名或者移動(dòng)文件的命令 , 對(duì)系統(tǒng)進(jìn)行重命名 , 如$filenameshortdoc 。這就可以實(shí)現(xiàn)更改擴(kuò)展名的需求 。不過(guò)筆者并不建議采用這個(gè)expr命令來(lái)完成這個(gè)需求 。因?yàn)楫?dāng)文件名的長(zhǎng)度不固定時(shí) , 這個(gè)正則表達(dá)式比價(jià)難寫(xiě) 。要將文件名字符串截取出來(lái)(去掉擴(kuò)展名的名字) , 有一定的難度 。
在這里 , 筆者介紹另外一個(gè)命令basename命令 。其實(shí)這也是一個(gè)字符串相關(guān)的處理命令 。其基本格式為basename text1 text2 。他的基本功能就是從第一個(gè)字符串中去掉第二個(gè)字符串的內(nèi)容 。如執(zhí)行命令basename setup.sh sh , 則就表示將setup.sh這個(gè)字符串中的sh字符串去掉 , 變?yōu)閟etup. 。那么此就可以利用這個(gè)命令來(lái)進(jìn)行成批修改擴(kuò)展名 。其具體的實(shí)現(xiàn)方式跟上面類(lèi)似 。只是在截取文件名字符串的時(shí)候 , 采用了basename命令 , 而不是expr命令 。而basename命令本身就帶有截取字符串的功能 , 不需要采用正則表達(dá)式 。所以實(shí)現(xiàn)起來(lái)相對(duì)簡(jiǎn)單一點(diǎn) 。
從這個(gè)案例中 , 筆者也想再次強(qiáng)調(diào)一下一個(gè)字符串處理的基本原則 。即無(wú)論是截取字符串還是對(duì)字符串進(jìn)行的其他操作 , 如果可以通過(guò)系統(tǒng)命令 可選項(xiàng)參數(shù)來(lái)實(shí)現(xiàn)的 , 就采用這種實(shí)現(xiàn)方式 。如果沒(méi)有的話 , 需要考慮能否采用basename等不需要正則表達(dá)式的命令來(lái)實(shí)現(xiàn) 。只有在以上兩種方式都不可行的情況下 , 才考慮使用exper命令來(lái)實(shí)現(xiàn) 。這主要是因?yàn)檎齽t表達(dá)式的設(shè)計(jì)實(shí)在比較麻煩 , 雖然其功能比較強(qiáng)大 。利用exper來(lái)統(tǒng)計(jì)一下字符串的長(zhǎng)度還好 , 但是如果要實(shí)現(xiàn)一些復(fù)雜功能 , 如截取字符串或者確定字符的位置 , 就需要系統(tǒng)工程師有比較深厚的功底了 。

推薦閱讀