2017-03-15 40 views
1

我有以下腳本的模板,我需要爲每種情況插入不同的PARAM值。sed在第N次出現後附加文本

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

你需要每個PATTERN或不同的值? – 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++}每一個圖案/Param/發現時間計數器加一c
  • c==n-1檢查c具有所需的值,並增加值加
  • 1總是awk將打印所有行。
  • -v v="1212212121" -v n=2將變量vn傳遞給腳本。
相關問題