linux下面進行字串的替換倒是比較方便,有很多支援的命令,如sed等都是非常的方便,現在有需求要在windows下面實現執行字串內容的替換,因為要根據不同的環境使用不同的配置檔案中的值,於是就準備寫乙個dos版的替換函式。
dos下面也是有替換功能的,如使用:
@echo off
set aa=hello lily.
echo replace before:%aa%
echo replace after:%aa:lily=tom%
pause
也能夠實現字串的替換,不過後面發現,當替換的內容中有如等號「=」等特殊符號時,這個函式就沒有辦法正常工作了,嘗試對特殊符號進行轉碼也不行。
後面採用一種變通的方式實現:使用vbs,它是vb的乙個子集,功能還是蠻強大的,這其中需要注意的就是給vbs傳引數需要通過通過環境變數傳遞,如下:
set tch=wscript.createobject("wscript.shell")
args=tch.expandenvironmentstrings("%keys%")
msgbox(args)
把這個寫入到乙個vbs檔案中,如test.vbs,功能就是把傳入的引數彈窗顯示出來,通過dos的呼叫方式如下:
set keys=hello,baby!
start test.vbs
當然vbs本身是可以自己執行的,不過如果沒有引數是沒有實際意義的。
知道了vbs的使用,那麼寫乙個簡單的替換方法那就是很簡單的事情了,如下replace.vbs:
dim fso,temp,file_temp,file_open,file_list,folder_name
dim filename,sourcestring,newstring
set fso = createobject("scripting.filesystemobject")
set tch=wscript.createobject("wscript.shell")
filename=tch.expandenvironmentstrings("%filename%")
sourcestring=tch.expandenvironmentstrings("%sourcestring%")
newstring=tch.expandenvironmentstrings("%newstring%")
sourcestring=replace(sourcestring,"@","=")
newstring=replace(newstring,"@","=")
set file_open = fso.opentextfile(filename,1)
file_temp = file_open.readall
file_open.close
file_temp = replace(file_temp,sourcestring,newstring)
set file_open = fso.opentextfile(filename,2)
file_open.writeline file_temp
file_open.close
通過replacecontent.bat封裝:
@echo off
set filename=%1
set sourcestring=%2
set newstring=%3
start replace.vbs
呼叫實列:
cmd /c replacecontent testfile.txt aaa bbb
不過在呼叫的使用偶爾會報許可權不允許,再次執行就不會有問題。 Linux下VIM文字內容替換
vi vim 中可以使用 s 命令來替換字串。該命令有很多種不同細節使用方法,可以實現複雜的功能,記錄幾種在此,方便以後查詢。可以使用 作為分隔符,此時中間出現的 不會作為分隔符 s vivian sky 替換當前行第乙個 vivian 為 sky s oradata apras user01 ap...
Java實現文字內容替換(四)
本次用隨機檔案實現文字內容替換,不過有苛刻的要求,要求原字串和替換字串位元組長度相等。在檔案找到原字串開始位置,然後seek定位,開始講替換後字串寫入即可實現替換文字特定內容.public class alterstringinfile lastpoint raf.getfilepointer ra...
Linux 下批量替換檔案內容
通常在網路上可以找到的方法是 sed i s oldstring newstring g grep oldstring rl path 但是其中有太多的限制,比如 無法篩選哪些檔案是你不想要的,你只能替換所有grep出來的檔案,我在專案裡遇到的一種情況是,這樣的替換會同時影響到.svn檔案,導致up...