2016-08-02 29 views
0

Ich habe folgende ZeilenLöscht alles in einer einzigen Spalte nach einem bestimmten Muster

ABC-Dup2 XUAS BSNMM 
CVD nbvn nbmsb 
SVDB-Dup4 NBV KJHA 
TTS-Dup7 MNMN NBA 

Ich will NUR -DuP aus der ersten Säule entfernen und halten Rest der Säulen, so dass ich

ABC XUAS BSNMM 
CVD nbvn nbmsb 
SVDB NBV KJHA 
TTS MNMN NBA 
habe

Ich versuche sed 's/-Dup. * // 1', aber es entfernt auch den Rest der Spalten aus dieser Zeile.

Antwort

0

Wenn das Muster -DuP gefolgt von einer Nummer wird dann könnte man so etwas wie

versucht

sed 's/-Dup[0-9]*//1'

+0

Versuchen Sie, dass, wenn die zweite Zeile der Eingabe ist 'CVD nbvn-Dup7 nbmsb'. Die "1" am Ende ist für das erste Vorkommen des Regexp, es ist keine Feldnummer. –

+0

Ich weiß, dass die Testprobe aus dem OP nicht erwähnt, das -Dup-Muster könnte irgendwo anders sein als die erste Spalte obwohl – Jawad

+1

Nein, aber er sagt 'ERSTE SPALTE ONLY' in schönen, großen Großbuchstaben so IMHO das ist ein ziemlich starker Hinweis. Die "1" ist redundant, das ist das Standardverhalten. –

3

Wenn Sie die .*-[^[:blank:]]* geändert würden Sie nicht mehr das Problem aber Sie würden immer noch das Problem der Entfernung von -Dupüberall auf der Linie, nicht nur die erste Spalte haben sed. Nur awk verwenden:

awk '{sub(/-Dup.*/,"",$1)}1' file 

Beachten Sie, wie die nur auf der ersten Spalte arbeitet (Feld):

$ cat file 
ABC-Dup2 XUAS BSNMM 
CVD nbvn-Dup7 nbmsb 
SVDB-Dup4 NBV KJHA 
TTS-Dup7 MNMN NBA 

$ awk '{sub(/-Dup.*/,"",$1)}1' file 
ABC XUAS BSNMM 
CVD nbvn-Dup7 nbmsb 
SVDB NBV KJHA 
TTS MNMN NBA 
0
sed 's/\(^[^ ]*\)-Dup[0-9]*/\1/' 
1

A sed Lösung muss das Feldtrennzeichen enthalten, um das Ziel nur für die erste Spalte zu definieren. sed GNU:

$ sed -r 's/^(\S*)-Dup\S*/\1/' file 

ABC XUAS BSNMM 
CVD nbvn nbmsb 
SVDB NBV KJHA 
TTS MNMN NBA