2014-02-14 57 views
0

我有一個文件a.com爲匹配後的字符串的一部分刪除,但使用都不行SED

N-N3-0.0012 -1 5 6 7 L 
C-CT-0.002225 -1 5 8 9 H H-3-1 
H-H-0.003534 -1 6 3 4 L 

我想a.com爲

N -1 5 6 7 L 
C -1 5 8 9 H H-3-1 
H -1 6 3 4 L 

基本上修改,我想刪除第一列中第一個「 - 」匹配後的所有內容,但保留所有其他列。

我可以通過將第一列提取到文件中,然後使用sed刪除匹配「 - 」後的所有內容並將其替換爲原始文件中的第一列。但我想知道是否有一個簡單的sed命令,用於不刪除行的其餘部分,而是在匹配後刪除其餘列。

+0

每一行之間是否真的有空行數據? –

+0

不,沒有黑線。謝謝 – user3311147

回答

3

是什麼?

kent$ awk '{sub(/-.*/,"",$1)}7' a.com 
N -1 5 6 7 L 
C -1 5 8 9 H H-3-1 
H -1 6 3 4 L 

的sed:

kent$ sed 's/-\S*//' file 
N -1 5 6 7 L 
C -1 5 8 9 H H-3-1 
H -1 6 3 4 L 

,如果你想保持格式:

kent$ sed 's/-\S*\s*/ /' file 
N -1 5 6 7 L 
C -1 5 8 9 H H-3-1 
H -1 6 3 4 L 
+0

+1,不僅僅是一種解決方案。 – BMW

+0

謝謝。這解決了我的問題 – user3311147

+0

我有類似的問題,除了我的分隔符是「。」但不知何故,我認爲它需要一個轉義序列,我該如何處理? – AishwaryaKulkarni

1

因爲其他人提供sed和awk的解決方案,這裏是純粹的外殼

腳本
#!/usr/bin/env bash 

while read -r a b 
do 
    echo ${a%%-*} $b 
done < file