2017-12-15 9 views
-4

Ich versuche, eine konstante Zeichenkette zu entfernen, die einem Muster entspricht. Ich kann das Muster über awk anpassen, gibt es eine Kombination von awk und sed oder vielleicht nur awk, die die Zeichenfolge an Ort und Stelle löschen kann?So passen und entfernen Sie eine Zeichenfolge in einem Muster

Beispiel:

Ich brauche den 14., 15. und 16. anzupassen "|" Symbol und lösche den Inhalt dazwischen.

Vor:

00000000,003377fdh,,BLUE,YELLOW,ORANGE,UANGTANG,||57000000|1250000000|2|ramp|CAR|||||||24000|11000|apples,12-15-2017 

Nach:

00000000,003377fdh,,BLUE,YELLOW,ORANGE,UANGTANG,||57000000|1250000000|2|ramp|CAR||||||,12-15-2017 
+3

Was ist mit "Äpfel" passiert? –

+2

wie magst du sie Äpfel? – karakfa

+1

StackOverflow erwartet von Ihnen, [versuchen Sie zuerst, Ihr eigenes Problem zu lösen] (http://meta.stackoverflow.com/questions/261592), und wir [beantworten auch keine Hausaufgabenfragen] (https: //softwareengineering.meta. stackexchange.com/questions/6166). Bitte aktualisieren Sie Ihre Frage, um zu zeigen, was Sie bereits in einem [minimalen, vollständigen und überprüfbaren Beispiel] (http://stackoverflow.com/help/mcve) versucht haben. Weitere Informationen finden Sie unter [Fragen stellen] (http://stackoverflow.com/help/how-to-ask) und nehmen Sie die [Tour der Website] (http://stackoverflow.com/tour)) :) – Barmar

Antwort

0
awk -F '|' -v 'OFS=|' '{$13 = $16; NF -= 3; print}' file 

oder

perl -F'\|' -ne 'splice(@F, 12, 3); print join("|", @F)' file 
+1

Der Effekt der Dekrementierung von NF ist undefiniertes Verhalten pro POSIX, also YYMV ... –

+0

Die AWK-Anweisung funktionierte für mich. Vielen Dank! –

0

Sie ca n versuchen Sie diese sed auch

sed -E 's/(([^|]*\|){3})//5' infile 
Verwandte Themen