2016-08-02 57 views
0

我有以下行一定的模式後刪除在一列中的一切

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

我想從第一欄只刪除-Dup並保留列的其餘部分,使得我有

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

我正在嘗試sed's/-Dup。* // 1',但它也刪除了該行的其餘列。

回答

0

如果圖案-Dup後跟一個數字,那麼你可以嘗試像

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

+0

嘗試如果第二行輸入是「CVD nbvn-Dup7 nbmsb」。最後的'1'是第一次出現正則表達式,它不是字段號。 –

+0

我知道,來自OP的測試樣本沒有提及-Dup模式可能在第一列以外的任何地方,儘管 – Jawad

+1

不,但他確實在第一列以好的,大的大寫字母說「FIRST COLUMN ONLY」,所以恕我直言,這是一個非常有力的提示。 '1'是多餘的,順便說一句,這是默認行爲。 –

3

如果更改了.*[^[:blank:]]*你將不再有這個問題,但你仍然有sed的從任何地方去除-Dup就行了,不只是第一列的問題。只需使用AWK:

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

注意怎麼說在第一列上工作(場):

$ 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

一個sed解決方案需要合併字段分隔符以將目標定義爲僅第一列。 GNU sed

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

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