2017-03-15 8 views
1

Ich habe eine Vorlage des folgenden Skripts und ich muss die verschiedenen PARAM Wert für jeden Fall einfügen.sed Anhängen Text nach N-ten Vorkommen

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

Ich fand nur ein Beispiel, wie der Wert für den ersten Fall einzufügen PARAM:

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

aber wie kann ich tun dies für die Fälle 2 und 3?

+0

Sie benötigen die verschiedenen Werte für jedes Muster oder dasselbe? – RavinderSingh13

+0

verschiedene Werte – hustas88

Antwort

0

Dies könnte für Sie arbeitet (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 

einen Zähler im Laderaum halten und wenn der Zähler Ihre Erwartungen übereinstimmt, Ersatz und dann aus dem Rest der Datei drucken.

0

Verwendung 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 

und so weiter ...

Erläuterung:

  • /Param/{c++} erhöht einen Zähler c jedes Mal das Muster /Param/ gefunden wird.
  • c==n-1 prüft, ob c den gewünschten Wert hat und addiert den Wert der
  • 1 ist immer wahr hinzufügen. awk wird alle Zeilen drucken.
  • übergibt die Variablen v und n an das Skript.
Verwandte Themen