将文本 "false" 替换为 "TRUE" 的 Dash 脚本?

Dash script to replace text "false" with "TRUE"?

我需要帮助修改 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

几天前我得到的上一个脚本删除了第一列中的文本。本题是将第一列(false)替换为文字“TRUE”。

第一个码串相同

search=$(awk 'BEGIN{OFS=ORS=""}{if(NR>1){print "|"}print ;}' Install.txt)

第二个代码串我尝试了不同的修改:

sed -i -r "s/^false/TRUE (.*#($search))$//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

感谢任何帮助。谢谢。

请您尝试以下操作:

awk '
    NR==FNR {a["#"] = ; next}       # array maps #num to "TRUE"
    $NF in a { = 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["#"] = 是一个数组赋值,它将键 #203 映射到值 TRUE.
  • 如果行中最后一个字段值$NF满足条件$NF in a 文件 ExtInstaller.sh 定义为数组 a.
  • 的键
  • = a[$NF} 将第一个字段 false 替换为 数组 TRUE.
  • 最后的 1 告诉 awk 打印当前行。