我有点把自己编码成一个角落了。不知道我的设计是否正确。但是我现在(现在)致力于这种设计。基本上我正在遍历大量文件。对于每个文件,我都在做另一个循环并查找特定的字符串。如果找到它们,则将它们存储到数组中。然后使用该数组,我再次循环并想要执行某种类型的sed并替换。这是我目前的代码...
for ruleset in "${rulesets[@]}"
do
for dml in "${dmls[@]}"
do
grep ${dml} ${ruleset}
RC=${?}
if [ $RC -eq 0 ]; then
my_array=()
while IFS= read -r line
do
my_array+=( "$line" )
done < <( grep ${dml} ${ruleset} )
for string in "${my_array[@]}"
do
********THIS IS WHERE I NEED HELP*********
done
fi
done
done
所以让我们蛮力吧。我有一个文件$ ruleset,我为该字符串grep命名为$ dml“ cems_wf_attr.dml”,它返回一些结果,并将这些结果存储到数组中。结果是:
<required_dml file_name="$AI_DATA_MOUNT/sandbox/waterfall_ces/curr/shared/dml/strat_output/cems_wf_attr.dml"></required_dml>
<extdataset>$AI_DATA_MOUNT/sandbox/waterfall_ces/curr/shared/dml/strat_output/cems_wf_attr.dml</extdataset>
<required_dml file_name="$AI_DATA_MOUNT/sandbox/waterfall_ces/curr/shared/dml/strat_output/cems_wf_attr.dml"></required_dml>
<extdataset>$AI_DATA_MOUNT/sandbox/waterfall_ces/curr/shared/dml/strat_output/cems_wf_attr.dml</extdataset>
太棒了!!非常简单。这就是我现在需要做的。我需要替换$ ruleset文件中的那些条目。因此,对于这4行(存储在我的数组中),我需要替换那里的值。值可以是值的两种可能的“类型”。有一个...
required_dml file_name
有一个...
extdataset
基本上,我需要替换此文件的目录。因此,根据$ dml字符串值,它将始终是特定的字符串替换。因此,对于此字符串“ cems_wf_attr.dml”,它将始终替换为“ $ SHARED_DML / strat_output / cems_wf_attr.dml”
因为它将始终被替换,所以我的想法是拥有一个包含所有可能的最终值的文件。因为文件名与原始值相同,所以我将使用$ dml变量对该文件进行grep复制以获取最终值,现在我可以使用该文件名替换它了。我正在使用文件,因为它很容易,而且我不知道如何像ksh中的某种字典那样工作。无论如何,我现在只需要sed和或awk命令的帮助即可完成此替换及其外观。谢谢!