2017-04-05 4 views
1

test.sed:Reverse-Ausgang in sed

#!/bin/sed -Ef 

/^(1|\+1)\(([0-9]{3})\)(555)-([0-9]{4})/d 
/^\(([0-9]{3})\)(555)-([0-9]{4})/d 

datei.txt:

(123)456-7890 
1(123)456-7890 
+1(123)456-7890 

(123)555-7890 
1(123)555-7890 
+1(123)555-7890 

(416)736-5053 
1(416)736-2100 
+1(416)736-2100 

Stromausgang:

(123)456-7890 
1(123)456-7890 
+1(123)456-7890 


(416)736-5053 
1(416)736-2100 
+1(416)736-2100 

Erwartete Ausgang:

(123)555-7890 
1(123)555-7890 
+1(123)555-7890 

Hallo. Ich möchte die erwartete Ausgabe wie oben haben, die nur 3 Sätze aufnimmt, die nicht in der aktuellen Ausgabe aufgenommen werden.

Gibt es eine Möglichkeit, das zu tun, indem Sie -Ef-Flag haben? Sie können mehr Flag hinzufügen, aber ich kann diese Flagge nicht löschen.

Ich habe versucht, wie folgt, was nicht funktioniert hat:

/^(1|\+1)\(([0-9]{3})\)(555)-([0-9]{4})/p 
/^\(([0-9]{3})\)(555)-([0-9]{4})/p 
+1

Können Sie beschreiben, was Sie, anstatt die Menschen analysieren Ihre reguläre Ausdrücke erreichen wollen? –

Antwort

1

Verwenden Sie die folgende Vorgehensweise:

test.sed:

#!/bin/sed -Ef 
/\([0-9]{3}\)555-[0-9]{4}/!d 

Befehl :

sed -Ef test.sed file.txt 

Der Ausgang:

(123)555-7890 
1(123)555-7890 
+1(123)555-7890