我有以下文件:
[root@f9044b5d9d1e aws-marketing-and-sales]# grep -HRe ".*\/common\/.*\${local.parent_folder_name}" *
ap-northeast-1/config/config/terragrunt.hcl: inline_policy = templatefile("${get_parent_terragrunt_dir()}/common/${local.environment}/config/${local.parent_folder_name}/inline-policy-s3.tpl", {
ap-northeast-2/config/config/terragrunt.hcl: inline_policy = templatefile("${get_parent_terragrunt_dir()}/common/${local.environment}/config/${local.parent_folder_name}/inline-policy-s3.tpl", {
ap-south-1/config/config/terragrunt.hcl: inline_policy = templatefile("${get_parent_terragrunt_dir()}/common/${local.environment}/config/${local.parent_folder_name}/inline-policy-s3.tpl", {
ap-southeast-1/config/config/terragrunt.hcl: inline_policy = templatefile("${get_parent_terragrunt_dir()}/common/${local.environment}/config/${local.parent_folder_name}/inline-policy-s3.tpl", {
我尝试将所有文件中出现的“${local.parent_folder_name}”替换为父文件夹名称,其中该行包含“common”,如下所示:
for file in $(grep -HRe ".*\/common\/.*\${local.parent_folder_name}" *); do
filename=$(echo $file | cut -d: -f1)
parent=$(echo $file | rev | cut -d/ -f2 | rev)
sed -i "/common/\${local.parent_folder_name}/$parent/g" $filename
done
这是我在运行上述脚本时遇到的错误:
sed: -e expression #1, char 9: unknown command: `$'
我发现了一些关于这方面的问题,但是没有一个有使用变量作为替换模式的例子。
我也尝试过不同的分隔符(|,!)但无济于事。
编辑:@moshe,它没有工作,这是输出:
grep -Re "/common\/.*\${local.parent_folder_name}" . | while read -r grep_line; do
if [[ $grep_line == *"$0"* ]]; then
continue
fi
echo $grep_line
filename=$(echo $grep_line | cut -d: -f1)
parent=$(echo $grep_line | rev | cut -d/ -f2 | rev)
echo "parent: $parent"
sed -i "/common/s?\${local.parent_folder_name}?$parent?g" $filename
done
./ca-central-1/config/config/terragrunt.hcl: inline_policy = templatefile("${get_parent_terragrunt_dir()}/common/${local.environment}/config/${local.parent_folder_name}/inline-policy-s3.tpl", {
parent: ${local.parent_folder_name}
sed: 1: "./ca-central-1/config/c ...": invalid command code .
./us-west-2/config/config/terragrunt.hcl: inline_policy = templatefile("${get_parent_terragrunt_dir()}/common/${local.environment}/config/${local.parent_folder_name}/inline-policy-s3.tpl", {
我试着把第一个grep中的“.”替换成“8”,但它只对一些文件起作用,而不是对所有文件起作用。有什么想法吗?
我做错了什么?
1条答案
按热度按时间ubbxdtey1#
不确定
parent
变量应该是什么,可能应该修复它,但脚本可能是这样的请注意,
sed
接受一个模式(/common/
),然后接受一个命令(a
用于追加,d
用于删除,s
用于替换)我们只想更改模式为
/common/
的行,因此在模式之后,我们执行常规搜索并替换-s/\${local.parent_folder_name}/$parent/g
为了使它更易读,我将分隔符
/
更改为?
因此
sed
为: