2016-04-14 4 views
0

空白をアンダースコアと括弧で置き換える場合は、ファイル内の最初の行に何も置き換えないでください(ここでは1を書き留めてください)。sedを使用して文字列を見つけて特定の行に置き換える+ -i.bakを使用する

これは、私が働いているファイルです。

$ head -n 1 head_test.csv 
"Rec Open Date","MSISDN","IMEI","Data Volume (Bytes)","Device Manufacturer","Device Model","Product Description" 

そして、これは私がSED

$ sed -e '1s/ /_/g' head_test.csv | sed -e '1s/(//g' | sed -e '1s/)//g' | head -n 1 
"Rec_Open_Date","MSISDN","IMEI","Data_Volume_Bytes","Device_Manufacturer","Device_Model","Product_Description" 

を使用してそれを達成する方法ですが、私は、既存のファイルを上書きする-i.bakオプションを使用して難しさを持ちます。誰でも-iオプションを使ってどのようにすることができるかアドバイスできます。

+0

への変更を行います| sed -e '1s /(// g' | sed -e '1s /)// g'> tmp && mv tmp head_test_real.csv ' – HattrickNZ

答えて

0

また、私はちょうど1行目つまりを持つファイルを作成する必要はありません、このように1にすべての3つのsed呼び出しを組み合わせて、ちょうどsedコマンドを実行する前にdata.bakというバックアップファイルを作成するためにあなたの-i.bakを追加することをお勧めしたいですhead_test.csvは必要とパイプラインの終わりに最後のheadコマンド:

$ ls data* 
data 
$ cat data 
"Rec Open Date","MSISDN","IMEI","Data Volume (Bytes)","Device Manufacturer","Device Model","Product Description" 
abcd 
xyz 
$ sed -i.bak -e '1s/\s/_/g' -e '1s/(//g' -e '1s/)//g' data 
$ cat data 
"Rec_Open_Date","MSISDN","IMEI","Data_Volume_Bytes","Device_Manufacturer","Device_Model","Product_Description" 
abcd 
xyz 
$ cat data.bak 
"Rec Open Date","MSISDN","IMEI","Data Volume (Bytes)","Device Manufacturer","Device Model","Product Description" 
abcd 
xyz 
$ 

-iは意味ないインプレース編集すなわちsed行い、ファイルデータ上のすべてのコマンドと効果的にファイルの内容を変更し、ファイル内のすべての変更を永続化

-i.bak第一は、ファイルのバックアップコピーを作成します。filename.bakをしてからバックアップをhavve上書きではなく、別の方法は、 `sedの-e「1秒//_/G」head_test_real.csvあるfilename

+0

tksはジョブのように見えます。 head -n 1'は説明のためだけだった。 – HattrickNZ

+0

2番目と3番目のコマンドを 's/[()] // g'に組み合わせることができます。 –

関連する問題