2016-04-10 8 views
0

Ich habe eine Datei mit Tausenden von Zeilen und Spalten, zwei der Spalten sind IP1 und IP2. IP1 ist immer die gleiche 192.168.100.1So ersetzen Sie den Wert aus einer Spalte mit dem Wert aus einer anderen Spalte in der gleichen Datei

* example.com, 192.168.100.1,10.10.1.1, 5effd70e9d99b1acf, 10,63,58,42,0,21,84055280,0 example2.com, 192.168. 100,1,10.10.1.50,, 255b2l429c8f23ee, 10,63,37,42,1,21,1451066297,0 Beispiel3.com, 192.168.100.1.10.10.1.58,, 589b7a5f8677b, 11,68,37,42,1, 20,1451066297,0

............. *

ich mag den Wert von IP1 mit dem Wert von IP2 ersetzen und den Wert von IP2 löschen.

Ich versuchte dies:

sed -i 's/192\.168\.100\.1/$(grep 192\.168\.100\.1 file | awk -F',' '{print $2}')/' file 

Folgender Fehler ist aufgetreten: sed: -e Ausdruck # 1, char 68: ungekündigten `s'Befehl

Bitte helfen.

+1

Schauen Sie sich bitte [editing-help] (http://stackoverflow.com/editing-help) an. – Cyrus

+0

Sie sollten das Buch Shell Scripting Recipes von Chris Johnson lesen, um die Grundlagen von sed, grep, awk und allgemeinem Shell Scripting und dann Effective Awk Programming, 4. Edition, von Arnold Robbins zu lernen, wenn Sie eine andere Textmanipulation durchführen wollen UNIX in Zukunft. –

Antwort

0

awk zur Rettung! eliminieren sed, sollte dies tun ...

awk -F, -v OFS=, '{$2=$3;$3=""}1' file 
0

zur Rettung sed! eliminieren awk, sollte dies tun ...

sed -i 's/192\.168\.100\.1,//' file 

Dieser sed Befehl die Zeichenfolge findet „192.168.100.1“, und ersetzen Sie es durch nichts.

. hat eine besondere Bedeutung in einem sed-Befehl, daher ist ein Backslash erforderlich. Mehr Infos auf den man-Seiten.

+0

Während dieser Code die Frage beantworten kann, zusätzliche Kontext in Bezug auf _why_ und/oder _how_ es antwortet die Frage würde erheblich verbessern seine langfristige Wert. Bitte [bearbeiten] Sie Ihre Antwort, um eine Erklärung hinzuzufügen. –

Verwandte Themen