0

次のようなアドレスを含むファイルがあります:
0x0003ffff
0x0003ffff
0x0000ffff
0x0000ffff
0x003fffff
0x05ffffff
0x3fffffff
0x000000ff There can be 'n' number of such addresses in that file , i want the addresses changed to

0x0003FFB0
0x0003FFB0
0x0000FFB0
0x0000FFB0
0x003FFFB0
0x05FFFFB0
0x3FFFFFB0
0x000000B0 すべての「n」アドレス。私が基本的に望んでいるのは、最後の 2 つの 'ff' を 'B0' に変更し、残りの 'f' を 'F' に変更することです。bash スクリプトを使用してそれを行うにはどうすればよいですか?

4

3 に答える 3

1

sed を使用します。

sed --in-place 's/\(0x000[0-9]\)ffff/\1FFB0/' file

最初にフラグなしで試して、それ--in-placeがあなたが望むものであることを確認してください。

Nikhilesh Sharma が指摘したように、質問に示されているよりも多くの F がある可能性がある場合は、次を使用できます。あなたがGNU sedを持っていると仮定しています。これが機能しない場合はお知らせください。より長いが posix に適したバージョンを提供します。

sed --in-place 's/\(0x[0-9f]\{6\}\)ff/\U\1B0/' file

これは、sed を使いこなすための優れたチュートリアルです。

于 2012-05-10T03:06:02.827 に答える
0

gawkを使用している場合は、文字列演算の代わりに数値演算を使用してください

gawk '
  {n = strtonum($1)} 
  (n % 0x100) == 0xff {printf("0x%08X\n", n - 0x4f)}
'
于 2012-05-10T13:33:30.387 に答える
0

仮定して:

  1. 入力ファイルはinput.txtと呼ばれます
  2. すべてのアドレスは列 1 から始まります
  3. 最初の 8 文字を保持したい
  4. すべてのアドレスが ff で終わる

次に、これが機能する可能性があります(少なくとも入力に対して機能します):

cat input.txt | cut -b1-8 | tr f F | sed s/$/B0/g
于 2012-05-10T03:27:11.713 に答える