2017-03-15 2 views
1

私は次のスクリプトのテンプレートを持っており、それぞれ別のPARAMの値を挿入する必要があります。N番目の出現後にsedのテキストを追加します

case $1 in 
1) 
    export PARAM= 
    ;; 
2) 
    export PARAM= 
    ;; 
3) 
    export PARAM= 
    ;; 
esac 

私はちょうど第一ケースPARAMに値を挿入する方法の例を見つけました:

sed -i '/export PARAM=/{s//export PARAM=1212212121/;:a;n;ba}' file 

が、どのように私は例2及び3のためにこれを行うことができますか?

+0

各パターンごとに異なる値が必要ですか? – RavinderSingh13

+0

異なる値 – hustas88

答えて

0

これは(GNUのSED)あなたのために働くかもしれない:

n=2 v=11212212121 
sed -ri '/export PARAM=/{x;s/^/x/;/x{'$n'}/!{x;b};x;s/(export PARAM=).*/\1'$v'/;:a;n;ba}' file 

は、ファイルの残りの部分をプリントアウト、その後、ホールド空間で、カウンタはあなたの期待と一致した場合にカウンタを保持し、代替と。

0

使用awk

awk -v v="1212212121" -v n=2 '/Param/{c++} c==n-1{$(NF)+=" "v}1' file 
awk -v v="1212212333" -v n=3 '/Param/{c++} c==n-1{$(NF)+=" "v}1' file 

のように...

説明:

  • /Param/{c++}はカウンターcにパターン/Param/が発見されるたびに増加します。 cが所望の値を持ち、値が
  • 1を追加する追加した場合
  • c==n-1チェックは常にです。 awkはすべての行を出力します。
  • -v v="1212212121" -v n=2は、変数vnをスクリプトに渡します。
関連する問題