在模式和行中搜索和替换sed

时间:2012-10-28 20:23:05

标签: bash sed replace

我经历了很多类似的帖子,但没有一个可以适用于我的。

我想在某些特定行中使用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

感谢您的所有时间和帮助;)

阿米尔

2 个答案:

答案 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}}部分保持不变。