2011-09-15 103 views
0

我有一個數據文件,需要將多個uniq標識符去掉連字符。從文件中的特定行中刪除連字符

所以我必須:

(Special_Section "data-values")

,我想把它替換成:

(Special_Section "datavalues")

我想用一個簡單的sed查找/替換,但數據和值每次都是不同的。最好,我會在原地運行這個文件,因爲該文件有很多我想保留的其他信息。

sed或awk是否有辦法從匹配部分刪除連字符?

目前我可以搭配:sed -i 's/Special_Section "[a-zA-Z0-9]*-[a-zA-Z0-9]*"/&/g *myfiles* 但是如果可能,我想在&上運行s/-//

回答

1

工作的呢?

sed -i '/(Special_Section ".*-.*")/{s/-//}' yourFile 
1

關閉 - 掃描線,然後在這些匹配的替代:

sed -i '/Special_Section "[a-zA-Z0-9]*-[a-zA-Z0-9]*"/s/\("[a-zA-Z0-9]*\)-\([a-zA-Z0-9]*\)"/\1\2/' *myfiles* 

您可以拆分在幾行,以避免這樣滾動條:

sed -i '/Special_Section "[a-zA-Z0-9]*-[a-zA-Z0-9]*"/{ 
     s/\("[a-zA-Z0-9]*\)-\([a-zA-Z0-9]*\)"/\1\2/ 
     }' *myfiles* 

並進一步思考,你也可以這樣做:

sed -i 's/\(Special_Section "[a-zA-Z0-9]*\)-\([a-zA-Z0-9]*"\)/\1\2/' *myfiles* 

這更緊湊。如果需要,您可以添加g限定符。這兩種解決方案都使用特殊的\(...\)表示法來捕獲部分正則表達式。

2

你好像是用GNU sed的,所以這樣的事情可能工作:

sed -ri ' 
    s/(Special_Section [^-]*)-([^)]*)/\1\2/g 
    ' <your_filename_glob>