[英]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上大吃一驚。
假如說:
那么這可以工作(至少對您的輸入有效):
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.