2016-09-17 1 views
1

Ich habe eine Datei mit folgenden InformationenUnix Shell Scripting zu entfernen - aus Datei

job, cost_code, laborcost,materialcost  
202-12-21, 23-94-23, **110.00-**, 120.04  
204-12-21, 23-93-23, 520.00, **120.04-**  
204-12-12, 24-93-23, 155.00, **120.04-** 

Es gibt einige Probleme Aufzeichnungen speziell diejenigen, die am Ende der Leitung ein -sign haben (markiert mit ** was nicht ist wirklich da in der Datei).

Ich versuche, das - Zeichen mit Regex zu entfernen, aber ich habe Probleme, nur die Menge diejenigen, die ein Problem haben.

+0

'tr' ist nicht dafür geeignet, es kann nur zum Entfernen oder Ersetzen von' -' überall verwendet werden. – tripleee

Antwort

0

die Sie interessieren, dieser Befehl Striche am Ende der Zeile entfernt

sed s'/-$//' 
echo "204-12-21, 23-93-23, 520.00, 120.04-" | sed s'/-$//' 
0

Sie können sed verwenden:

sed -i~ 's/\([0-9]\)-,/\1,/g;s/-$//' input.csv 

Der erste Ausdruck eine Ziffer von -, und ersetzt sie durch die Ziffer folgt findet und Komma; Der zweite Ausdruck entfernt Bindestriche an Zeilenenden.

+0

Vielen Dank es zu schätzen – meso

+0

@ meso: danke = upvote/akzeptieren. – choroba

+0

aus irgendeinem Grund funktioniert der Befehl nicht für das Ende der Werbebuchung, habe ich die verschiedenen Varianten versucht, aber es funktioniert noch keine Gedanken? – meso

0

Dies könnte für Sie arbeitet (GNU sed):

sed -r 's/-(,|$)/\1/g' file 

entfernen einen Bindestrich vor einem Komma oder einen Bindestrich aus dem letzten Feld einer Zeile.

Verwandte Themen