2016-08-12 7 views
-2

Der Inhalt der Datei a.txt ist:bash: das spezifische Muster von Zeichen entfernen von einer Linie

10.39.105.16tcp(1234) ABCDEF02 
10.49.105.13tcp(521) ABCDEFV01 
10.19.105.12tcp(1241) ABCDEFV01 
10.29.105.20tcp(1222) ABCDEF03 
10.39.104.9tcp(131)  ABCDEF21 
10.49.104.34tcp(1512) ABCDEF22 
10.89.104.120tcp(1384) ABCDEF32  

Wie die folgende Ausgabe zu erreichen:

10.39.105.10 ABCDEF02 
10.49.105.13 ABCDEFV01 
10.19.105.13 ABCDEFV01 
10.29.105.20 ABCDEF03 
10.39.104.1 ABCDEF21 
10.49.104.2 ABCDEF22 
10.89.104.130 ABCDEF32 

Wie entfernen das Muster tcp (*) in jeder Zeile der oben genannten Datei?

+0

Katze a.txt | Schnitt -d $ '\ t' -f1 | cut -d $ 't' -f1> 1 und cat a.txt | cut -d $ '\ t' -f2> 2 und einfügen -d $ "\ t" 1 2 .. Es hat funktioniert, aber ich war nur neugierig darauf, es in einem einzigen Befehl zu erreichen. – Srikanth

+2

In Ihrem Beispiel hat sich auch die letzte Zahl vor tcp geändert, stimmt das? –

Antwort

1

können Sie sed verwenden:

sed 's/tcp([0-9]\+)\s\+/ /' a.txt 

, die auch von dem hinteren Raum nach tcp befreien werden erhalten (*) und es mit einem einzigen Raum zu ersetzen, wie es in der Ausgabe erscheint.

Um die tatsächliche Datei zu ändern (und nicht nur der Ausgang), fügen Sie die Option -i für Inplace:

sed -i 's/tcp([0-9]\+)\s\+/ /' a.txt 
+1

Ich habe meinen Versuch erwähnt, auf Ihren Kommentar zu antworten. Du kannst sehen. – Srikanth

1

Je nachdem, was Sie versuchen, dies zu erreichen, könnte die Antwort sein:

awk '{sub(/tcp(.+)/,"",$1)}1' file 

    10.39.105.16 ABCDEF02 
    10.49.105.13 ABCDEFV01 
    10.19.105.12 ABCDEFV01 
    10.29.105.20 ABCDEF03 
    10.39.104.9 ABCDEF21 
    10.49.104.34 ABCDEF22 
    10.89.104.120 ABCDEF32 
Verwandte Themen