2011-09-15 20 views
0

データファイルに複数のユニーク識別子をハイフンから削除する必要があります。ファイル内の特定の行からハイフンを削除する

だから私は持っている:

(Special_Section "data-values")

を、私はそれに置き換えがしたい:私は、単純なsedの検索/置き換えを使用していた

(Special_Section "datavalues")

が、データと値は毎回異なります。できれば、ファイル内にはたくさんの他の情報があるので、私はこれを実行したいと思います。

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* 

あなたは、いくつかの行にわたってSOでスクロールバーを避けるためにすることを分割することができます:

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> 
関連する問題