迭代文件并使用shell脚本替换多个arigument

时间:2017-08-12 09:13:06

标签: shell

情况就是这样。

我有许多输入属性如下:

$Prop1 = value1;
$Prop2 = value2;
$Prop3 = value3;

并且在包含少量子文件夹的文件夹下有一些带有以下内容的txt文件(文件具有不同的内容但格式相同): 文件位于文件夹中,子文件夹很少。

{{Prop1}}.{{Prop2}}
{{Prop2}}-{{Prop3}}
{{Prop1}}:{{Prop4}}:{{Prop2}}-{{Prop4}}
${Argument1} = {{Prop1}}.{{Prop2}}.{{Prop3}}.{{Prop4}}

有些人可以帮我解决下一个案件:

  1. 遍历文件夹和子文件夹查找以* .txt
  2. 结尾的文件
  3. 对于所有受资助的文件," {{Prop *}}"应替换为相应的$ Prop *值。例如:" {{Prop1}}"应成为" value1"
  4. IF" {{Prop *}}"不存在(在我们的情况下" {{Prop4}}")不替换任何内容并引发错误
  5. " $ {参数*}"不应该被触及并且应该保持不变
  6. 不应更改原始文件,并且应在其他位置创建具有替换的新文件
  7. 提前致谢

    UPD:

1 个答案:

答案 0 :(得分:1)

Perl可以处理这种条件搜索&取代

#!/bin/bash

Prop1=value1
Prop2=value2
Prop3=value3

export Prop1 Prop2 Prop3

shopt -s globstar 

perl -i.bak -pe '
    s[ ( \{\{ (.+?) \}\} ) ]
     [ 
        if (exists $ENV{$2}) {
            $ENV{$2}
        } else {
            warn "unknown property $2 in file $ARGV\n";
            $1
        } 
     ]gex
' **/*.txt

e命令的s///标志允许您在替换块中运行任意perl代码

运行它:

$ bash replace_props.sh 
unknown property Prop4 in file sub1/file.txt
unknown property Prop4 in file sub1/file.txt
unknown property Prop4 in file sub1/file.txt
$ cat sub1/file.txt
value1.value2
value2-value3
value1:{{Prop4}}:value2-{{Prop4}}
${Argument1} = value1.value2.value3.{{Prop4}}