我是新來的FAKE,並試圖在FAKE中實現一些東西,如下所述: 我有一個文件有超過100行,我想改變幾行代碼,假設我想要更改第二行,即IFR.SIIC._0.12
至 IFR.SIIC._0.45
替換給定文件中的文本 - 假F#製作
我該怎麼做。 我會使用ReplaceInFile或RegexReplaceInFileWithEncoding來做到這一點嗎?
我是新來的FAKE,並試圖在FAKE中實現一些東西,如下所述: 我有一個文件有超過100行,我想改變幾行代碼,假設我想要更改第二行,即IFR.SIIC._0.12
至 IFR.SIIC._0.45
替換給定文件中的文本 - 假F#製作
我該怎麼做。 我會使用ReplaceInFile或RegexReplaceInFileWithEncoding來做到這一點嗎?
有許多功能可以幫助您:您將選擇哪一個取決於您更願意編寫代碼的方式。例如,ReplaceInFile
希望您提供函數,而RegexReplaceInFileWithEncoding
希望您給它一個正則表達式(以字符串形式,而不是作爲Regex
對象)。根據您要替換的文字,可能比其他文字更容易。例如,你可以使用ReplaceInFile
像這樣:
Target "ChangeText" (fun _ ->
"D:\Files\new\oneFile.txt" // Note *no* !! operator to change a single file
|> ReplaceInFile (fun input ->
match input with
| "IFR.SIIC._0.12" -> "IFR.SIIC._0.45"
| "another string" -> "its replacement"
| s -> s // Anything else gets returned unchanged
)
)
如果,例如,你有一組要匹配,在短短的單文件具體字符串這將是有益的。但是,有一個簡單的函數ReplaceInFiles
(注意複數),它允許您一次替換多個文件中的文本。此外,代替以函數作爲其參數,ReplaceInFiles
取對的序列。這往往是比較容易寫:
let stringsToReplace = [
("IFR.SIIC._0.12", "IFR.SIIC._0.45") ;
("another string", "its replacement")
]
Target "ChangeText" (fun _ ->
!! "D:\Files\new\*.txt"
|> ReplaceInFiles stringsToReplace
)
如果你想在表格指定要搜索和替換字符串正則表達式,那麼你會希望RegexReplaceInFileWithEncoding
或RegexReplaceInFilesWithEncoding
(注意是複數:前者採用了單個文件而後者需要多個文件)。我就告訴你的多文件版本爲例:
Target "ChangeText" (fun _ ->
!! "D:\Files\new\*.txt"
|> RegexReplaceInFilesWithEncoding @"(?<part1>\w+)\.(?<part2>\w+)\._0\.12"
@"${part1}.${part2}._0.45"
System.Text.Encoding.UTF8
)
這將允許您更改IFR.SIIC._0.12
到IFR.SIIC._0.45
和ABC.WXYZ._0.12
到ABC.WXYZ._0.45
。
你希望使用哪一個取決於你有多少文件,以及你需要多少不同的替換字符串(以及將它們寫成正則表達式有多困難)。
非常感謝真棒回答:) – KMittal
嗨rmunn:我想從具有字符串的變量中替換字符串。 或如下所示: @「admintool:RBI.ICISApi.AdminTool _」+ version_no 我收到一個錯誤「綁定中出現意外的引號」 – KMittal
@KMittal - 這可能是F#代碼中某種語法錯誤,所以我如果沒有看到整個功能,將無法回答你的問題。打開一個新問題並再次提問,並確保包含代碼示例。顯示出現錯誤的整個函數,並且不要忘記使用'{}'按鈕正確縮進它。 – rmunn