2017-04-11 16 views
0

Linuxでファイルを操作し、指定された開始位置と終了位置の文字列を挿入するファイルを操作する必要があります。私はスクリプト言語を使う方法を学んでいるだけで、いくつかのsedの例を探しましたが、必要なものは何も探しませんでした。だから私が持っている目標は、ファイル内のすべての行を、位置20から位置33までの同じ文字列で置き換えることです。各レコードの長さは約2000文字です。 14文字の範囲を8文字の文字列に置き換えます。 「A0000CDD」Linuxはsedコマンドを使用して、文字列をファイル内のすべてのレコードの開始位置と終了位置から変更します。

ように、すべてのsedの例では、私はちょうど交換する必要があるパターンを交換したいように見える

2017-04-01 01:13:20A0000CDD30511version=1.0..... 2017-04-01 01:13:20A0000CDD30511version=1.0..... 2017-04-01 01:13:20A0000CDD30511version=1.0..... 2017-04-01 01:13:20A0000CDD30511version=1.0.....

として

2017-04-01 01:13:20<11102233HRDS>30511version=1.0..... 2017-04-01 01:13:20<11102234HRDS>30511version=1.0..... 2017-04-01 01:13:20<11102235HRDS>30511version=1.0..... 2017-04-01 01:13:20<11102236HRDS>30511version=1.0.....

の記録が終了する必要があります開始同じ文字列の同じ位置。

ファイルの各レコードを入力し、各レコードを操作して別のファイルに出力することで、これを行うことができました。問題は、ファイルに数百万のレコードが含まれ、処理に時間がかかりすぎるということです。

GNU sedのを助ける

MG

+1

はパターンが 'で始まり、<'と 'で終わる>'文字列だろうか? – JNevill

+0

< >パターンが各行のいくつかの場所に表示されます。 –

答えて

0

感謝:

sed -r 's/(.{19}).{14}(.*)/\1A0000CDD\2/' file 

出力:

 
2017-04-01 01:13:20A0000CDD30511version=1.0..... 
2017-04-01 01:13:20A0000CDD30511version=1.0..... 
2017-04-01 01:13:20A0000CDD30511version=1.0..... 
2017-04-01 01:13:20A0000CDD30511version=1.0..... 

を、あなたのファイルを編集したい場合は、 "場所に" 使用者のsedのオプションを-i

+0

ありがとう、サイラス。このコマンドは、必要なだけ正確に機能します。 –

1

awkの代替:

awk -F" |=" '{FS=OFS;gsub(/<.{12}>/,"A0000CDD",$2)} 1' file 

出力:

2017-04-01 01:13:20A0000CDD30511version 1.0..... 
2017-04-01 01:13:20A0000CDD30511version=1.0..... 
2017-04-01 01:13:20A0000CDD30511version=1.0..... 
2017-04-01 01:13:20A0000CDD30511version=1.0..... 
関連する問題