2016-07-11 8 views
1

Ich möchte sed verwenden eines Bündels von Instanzen der Dinge in einer Datei Wenn loszuwerden sagen, ich habe eine Datei gefunden aufgerufen, dieShell Schleife Aufruf sed Befehl jeder Iteration

,cat 
,dog 
,rat 

hat und ich habe eine Dateidaten, die ist wie

1,dog,bird,cat,rat 
2,cat,dog 
3,bernie,cat,rat 

Durch die Ausführung dieses Befehls ich möchte eine Datei erhalten (dass ich NotFound nennen) wie

1,bird, 
2 
3,bernie 

Im Moment bin ich thining ich es in irgendeiner Art und Weise wie unten tun könnte, aber ich weiß, das

while read p; do 
     cat data | sed "s/$p//g" > NotFound 
done < found 

Antwort

0

Inline-Bearbeitung von sed kommen praktisch hier nicht richtig ist, wie Sie dieselbe Datei ändern halten für jede Zeile in found Datei:

while read -r p; do 
    sed -i "s/$p//g" data 
done < found 

# check output 

cat data 
1,bird 
2 
3,bernie 
1

in der Schale Looping ist ein ineffizienter Ansatz.

sed 's/^/s|/;s/$/||g/' found | sed -f - data > notfound 

Mit anderen Worten, wandeln die Muster in einem einzigen sed Programm und führen Sie es an die Datendatei: Ich würde so etwas empfehlen.