簡體   English   中英

如何僅更改單詞中的特定字母Bash腳本

[英]How to change only specific letters within a word us bash scripting

我有一個包含如下地址的文件:
0x0003ffff
0x0003ffff
0x0000ffff
0x0000ffff
0x003fffff
0x05ffffff
0x3fffffff
0x000000ff該文件中可以有'n'個這樣的地址,我希望將地址更改為

0x0003FFB0
0x0003FFB0
0x0000FFB0
0x0000FFB0
0x003FFFB0
0x05FFFFB0
0x3FFFFFB0
0x000000B0對於所有“ n”地址。 我基本上想要的是將最后2個'ff's更改為'B0',將其余的'f's更改為'F'我該如何使用bash腳本做到這一點?

使用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上大吃一驚。

假如說:

  1. 您的輸入文件稱為input.txt
  2. 所有地址都從第1列開始
  3. 您想保留前8個字符
  4. 所有地址都以ff結尾

那么這可以工作(至少對您的輸入有效):

cat input.txt | cut -b1-8 | tr f F | sed s/$/B0/g

如果您有gawk,請使用數字運算而不是字符串運算

gawk '
  {n = strtonum($1)} 
  (n % 0x100) == 0xff {printf("0x%08X\n", n - 0x4f)}
'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM