我需要更新几个脚本,用另一个替换静态值。目前我正在研究R for windows,虽然得到了我需要的输出,但我无法摆脱输出上的 ^ M 字符。
这是我的代码:
setwd("/home/scripts/")
filesInFolder <- list.files(path=".", pattern="\\.k$", recursive=TRUE)
for( currentFile in filesInFolder ){
fileContent <- readLines(currentFile)
varToReplace <- "WORKDIR"
varReplacement <- "$MY_VAR"
strToSearch <- paste("(.*\\/)(", varToReplace, ")(\\/.*)", sep="")
#"(.*\\/)(WORKDIR)(\\/.*)"
strReplacement <- paste( "\\1", varReplacement, "\\3", sep="")
#"\\1$MY_VAR\\3"
newFileContent <- gsub(strToSearch, strReplacement, fileContent )
print(newFileContent)
currentFile <- paste(currentFile, "b", sep="")
cat(newFileContent, file=currentFile, sep="\n")
}
这是我正在阅读的文件之一:
#!/bin/ksh
CURRENT_DIRECTORY=/WORKDIR/something
ls $CURRENT_DIRECTORY
#some logic
#more logic
这是我得到的输出文件:
#!/bin/ksh^M
^M
CURRENT_DIRECTORY=/$MY_VAR/something^M
^M
ls $CURRENT_DIRECTORY^M
#some logic^M
#more logic^M
由于我必须更换大约200多个这个值的实例,我想让它自动化。我知道有一些叫做 dos2unix 的东西,但正如我所说,我正在开发Windows,因为这些文件将被上传到存储库并从那里下载,我需要上传它们,将它们下载到Linux机器中并重新上传。我也不能在Linux中使用R.
感谢。
修改 源文件已经有Unix格式 - 我可以在Notepad ++上看到它 - 问题在于输出。
答案 0 :(得分:0)
我能够做我想做的事,但我不太确定它是最佳解决方案。
setwd("/home/scripts/")
filesInFolder <- list.files(path=".", pattern="\\.k$", recursive=TRUE)
for( currentFile in filesInFolder ){
fileContent <- readLines(currentFile)
varToReplace <- "WORKDIR"
varReplacement <- "$MY_VAR"
strToSearch <- paste("(.*\\/)(", varToReplace, ")(\\/.*)", sep="")
#"(.*\\/)(WORKDIR)(\\/.*)"
strReplacement <- paste( "\\1", varReplacement, "\\3", sep="")
#"\\1$MY_VAR\\3"
newFileContent <- gsub(strToSearch, strReplacement, fileContent )
charVector <- strsplit(newFileContent,"")
rawFileContent <- NULL
for(currentString in charVector)
{
currentString <- unlist(lapply(currentString, charToRaw))
#convert every char to raw
rawFileContent <- c(rawFileContent, currentString, charToRaw("\n"))
#concatenate raw string with \n, to differentiate strings
}
currentFile <- paste(currentFile, "b", sep="")
fileConn <- file(currentFile, "wb")
writeBin(rawFileContent, fileConn)
close(fileConn)
}