unix – 如何更改模板中替换变量的格式

我需要迭代目录中的文件并执行以下替换.

之前:

Hello ${USER_NAME}, you live at
${HOME_ADDRESS}. It is now ${TIME}

后:

Hello ${userName}, you live at
${homeAddress}. It is now ${time}

${}中出现的不同令牌的数量很大,因此运行起来并不可行:

find . -name '*' -exec sed -i 's/${USER_NAME}/${userName}/g' {} \;
find . -name '*' -exec sed -i 's/${TIME}/${time}/g' {} \;

等等

我希望可以使用单个命令执行此替换,看起来像:

find . -name '*' -exec sed 's/XXX/YYY/g' {} \;

但我无法弄清楚用什么代替XXX和YYY.是否可以在一个命令中执行此操作?

干杯,
多纳尔

最佳答案
sed的-i标志将就地编辑文件.对于XXX和YYY,您可以使用以下内容:

sed -i 's/USER_NAME/userName/g'

等等.

更新:我发现您的问题实际上是自动将“USER_NAME”更改为“userName”.你可以尝试这个Perl脚本:

sub convert {
    my $r = lc $_[0];
    $r =~ s/_(.)/\U$1\E/g;
    return $r;
}
while (<>) {
    s/\${([A-Z_]+)}/\${@{[convert $1]}}/g;
    print;
}

像这样运行:

perl -i convert.pl inputfile.txt

样本输出:

$cat inputfile.txt
Hello ${USER_NAME}, you live at ${HOME_ADDRESS}. It is now ${TIME}
$perl -i convert.pl inputfile.txt
$cat inputfile.txt
Hello ${userName}, you live at ${homeAddress}. It is now ${time}

转载注明原文:unix – 如何更改模板中替换变量的格式 - 代码日志