我经历了很多类似的帖子,但没有一个可以适用于我的。
我想在某些特定行中使用sed进行搜索和替换,其方式只匹配第一次出现;让我说我有这部分剧本:
processor <- read.table("../mall_all/adpcm/FULL_DB-constprop", header=TRUE, colClasses=c("reassociate"="factor", "scalarrepl"="factor", "inline"="factor", "sccp"="factor", "loop_reduce"="factor"))
processor<-processor[-c(20:40)]
processor$intensity <- processor$int_high - processor$int_low
processor$performance<- processor$perf_high - processor$perf_low
processor<-processor[-c(1:4)]
processor<-processor[,!names(processor) %in% c("constprop")]
我想继续更改
中的 $ constprop 变量 "../mall_all/adpcm/FULL_DB-constprop"
AND
[,!names(processor) %in% c("constprop")]
在我写的循环中,问题是;我希望 colClasses parameteres AND 其余的脚本在进入循环时保持不变(循环具有编译器选项,如:reassociate,inline,constprop等)< / p>
我想知道为什么我的搜索和替换不起作用:
set -x
compilerOptionList="constprop dce inline instcombine licm loop_reduce loop_rotate loop_unroll loop_unswitch loop_unswitch mem2reg memcpyopt reassociate scalarrepl sccp simplifycfg "
stringToBeReplaced=constprop
for compilerOption in $compilerOptionList
do
echo "Using compiler option: $compilerOption"
//here you could see the sed scripts
sed -i "1,15 /FULL_DB/,/header/ s/$stringToBeReplaced/$compilerOption/" r.scr
stringToBeReplaced=$compilerOption
make
mv Rplots.pdf Rplots_adpcm_$compilerOption.pdf
echo "DONE! $compilerOption"
done
感谢您的所有时间和帮助;)
阿米尔
答案 0 :(得分:1)
我不确定是否正确理解了您的需求,但也许是
sed -e "
1,15ba;
/FULL_DB/,/header/ba;
bb;
:a;
s/stringToBeReplaced/$compilerOption/;
:b;
" -i r.scr
可以胜任。
答案 1 :(得分:0)
此行存在问题
sed -i "1,15 /FULL_DB/,/header/ s/$stringToBeReplaced/$compilerOption/" r.scr
它不是有效的sed命令语法。你需要把它的一部分括在像这样的大括号中
sed -i "1,15 { /FULL_DB/,/header/ s/$stringToBeReplaced/$compilerOption/ }" r.scr
但我认为更简洁的方法是为sed
的输入和输出使用单独的文件,即将该行更改为
sed "1,15 s/constprop/$compilerOption/" r.scr_tmp >r.scr
您不需要stringToBeReplaced
变量。这样你总是替换“constprop”,而不必担心要替换的字符串出现在代码的其他地方。
r.scr_tmp
将包含与r.scr
相同的代码,但constprop
的{{1}}部分保持不变。