2016-08-16 20 views
0

私は2つのファイルを持っていますtest1 & test2あるランダムな位置に違いがあります。私はtest1とテスト2が異なるchar位置を検索したい&テスト1で*付き。しかし、制約はcharの位置を知るだけでcharを知らないことです。 私はcmp -bを使って、異なるバイト位置を取得しようとしましたが、sedで何かを得ることができません。また、バイト位置でcharを置き換えることができます。ライン内のchar位置も異なっています。したがって、任意のヘルプ(主な制約は、ファイル内の他の場所でその変更がその位置でのみ変更されることを望まないので、char値で置き換えることができないということです)。最初の出現交替は、異なる位置の前にある可能性があるため、最初の出現交替も機能しません。特定のバイト位置でcharを置き換えるsedコマンド

+0

ご質問はひどく不明瞭である、私はちょうどあなたが後にあるかを把握することはできません。あなたが問題を提示し、それを解決しようとする方法を提示しようとするので、それは有効な質問だと私は信じています。実際の意図がちょっとあいまいです。あなたは2つのファイル(1〜2行のテキスト)の例と、後の結果を提供できますか? – grochmal

答えて

0

ファイルを切り捨てずにオフセットを設定してバイトを書きたいのであれば、おそらくDDは役に立ちますか?

セットアップ:

$ cat f1 
aaaaaaaaaaaaaaaaaaaaaaaaa 
$ cat f2 
aaaaaaaaaaaaaaabaaaaaaaaa 

スクリプト:

if ! CMPOUT=`cmp -b f1 f2`; then 
    POS=`echo "$CMPOUT" | sed -r 's/^.*: byte ([0-9]+),.*$/\1/'` 
    echo -n '*' | dd of=f2 seek="$((POS-1))" bs=1 count=1 conv=notrunc 
fi 

結果:

$ cat f2 
aaaaaaaaaaaaaaa*aaaaaaaaa 
+0

お返事ありがとうございます、これは私が望むものですが、うまくいきますが、私のファイルは行以上の違いがあり、どの行にも違いがあります。ファイルはMB単位でもあります。ファイルのサイズ –

+0

@ Mahi.G:ただ試してみてください。 'cmp'出力が期待されている限り、バイナリファイルを含めて何でもできると思います。私は以下のようにDDを使用してファイル2でBの前に*を追加したい場合はどのような –

+0

おかげで、 - aaaaaaaaaaaaaaa * Mahi.G @ baaaaaaaaa –

関連する問題