我需要幫助我修改幾天前獲得的一個腳本的 bash 腳本。它洗掉一個文本。這個問題要求替換文本。
該腳本將讀取檔案“Install.txt”的值,(示例內容):
TRUE 203
TRUE 301
TRUE 602
TRUE 603
這些數字對應于檔案中的相同數字:“ExtInstaller.sh”,(示??例內容):
false Styles "Diary Thumbnails" #202
false Styles "My Border Style" #203
false Menus "My Menu" #301
false Decorations "Diary Decor" #501
false Modules "Control Pager Button" #601
false Modules "Dash To Dock" #602
false Modules "Desk Switch" #603
所有行都是“假的”。該腳本會將與檔案“Install.txt”中具有相同編號的相應行的文本“false”更改為“TRUE”。例如,TRUE 203用#203更改行。
false Styles "My Border Style" #203
到
TRUE Styles "My Border Style" #203
我幾天前在這個論壇上獲得的上一個腳本洗掉了第一列中的文本。這個問題是用文本“真”替換第一列(假)。
第一個代碼字串是相同的。
search=$(awk 'BEGIN{OFS=ORS=""}{if(NR>1){print "|"}print $2;}' Install.txt)
我嘗試了不同的修改的第二個代碼字串:
sed -i -r "s/^false/TRUE (.*#($search))$/\1/g" ExtInstaller.sh
and
sed -r "s/^false (.*($search))$/\TRUE/g" ExtInstaller.sh
第一個給出錯誤,第二個將“false”替換為“TRUE”,但不顯示相應的文本字串。
false Styles "Diary Thumbnails" #202
TRUE
TRUE
false Decorations "Diary Decor" #501
false Modules "Control Pager Button" #601
TRUE
TRUE
任何幫助表示贊賞。謝謝你。
uj5u.com熱心網友回復:
請您嘗試以下方法:
awk '
NR==FNR {a["#"$2] = $1; next} # array maps #num to "TRUE"
$NF in a {$1 = a[$NF]} # if #num is in the array, replace
1' Install.txt ExtInstaller.sh
輸出:
false Styles "Diary Thumbnails" #202
TRUE Styles "My Border Style" #203
TRUE Menus "My Menu" #301
false Decorations "Diary Decor" #501
false Modules "Control Pager Button" #601
TRUE Modules "Dash To Dock" #602
TRUE Modules "Desk Switch" #603
- 該陳述句
NR==FNR {command; next}是僅使用第一個引數 (Install.txt) 中的檔案執行命令的習慣用法。 a["#"$2] = $1是一個陣列賦值,它將例如 key 映射#203到 valueTRUE。- 如果檔案行中的最后一個欄位值被定義為陣列的鍵,則條件
$NF in a滿足。$NFExtInstaller.sha $1 = a[$NF}false用陣列的值替換第一個欄位TRUE。- 最后
1告訴awk列印當前行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/440726.html
