在文件中查找行,获取该行的子字符串,然后替换为另一个字符串

时间:2019-11-22 20:35:24

标签: bash shell unix ksh

我有点把自己编码成一个角落了。不知道我的设计是否正确。但是我现在(现在)致力于这种设计。基本上我正在遍历大量文件。对于每个文件,我都在做另一个循环并查找特定的字符串。如果找到它们,则将它们存储到数组中。然后使用该数组,我再次循环并想要执行某种类型的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命令的帮助即可完成此替换及其外观。谢谢!

0 个答案:

没有答案