0

私は似たような投稿をたくさんしましたが、私のものには当てはまりませんでした。

最初の出現のみに一致する方法で、いくつかの特定の行で 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"

[,!names(processor) %in% c("constprop")]

私が書いたループでは、問題は次のとおりです。colClasses パラメーターが必要で、残りのスクリプトはループに入っても同じままです (ループには、reassociate、inline、constprop などのコンパイラ オプションがあります)

なぜ私の検索と置換が機能しなかったのか疑問に思っていました:

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

あなたの時間と助けてくれてありがとう;)

アミール

4

2 に答える 2

1

あなたのニーズを正しく理解したかどうかはわかりませんが、

sed -e "
    1,15ba;
    /FULL_DB/,/header/ba;
    bb;
    :a;
    s/stringToBeReplaced/$compilerOption/;
    :b;
  " -i r.scr

仕事をすることができます。

于 2012-10-28T21:26:29.023 に答える
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ことを除いて、 と同じコードが含まれます。constpropr.scr_tmp

于 2012-10-29T13:42:08.083 に答える