sed错误,用变量替换部分字符串

杰夫·卡森

我有3个文本文件。我想搜索file3一个字符串,file2然后用file1找到的一个字符串替换它我需要在file1其中的字符串末尾附加一个自定义标记,file3替换从中找到的部分字符串file2

file3

aws ec2 create-tags --region us-east-1 --resourcesi-XXXXX --tags Key=Developer Name,Value=XXXXX Key=Resource Group,Value=arn:aws:iam::XXXXX:root
aws ec2 create-tags --region us-east-1 --resourcesi-XXXX --tags Key=Developer Name,Value=XXXXX Key=Resource Group,Value=arn:aws:iam::XXXXX:user/user

file2

arn:aws:iam::XXXXX:root 
arn:aws:iam::XXXXX:user/user

file1

my_custom_tag_1
my_custom_tag_2

所需的输出:

aws ec2 create-tags --region us-east-1 --resourcesi-XXXXX --tags Key=Developer Name,Value=XXXXX Key=Resource Group,Value=my_custom_tag_1
aws ec2 create-tags --region us-east-1 --resourcesi-XXXX --tags Key=Developer Name,Value=XXXXX Key=Resource Group,Value=my_custom_tag_2

我尝试将文件中的行加载到数组中,并在sed替换中包含索引

sed "s|${file2array[0]}|${file1array[0]}|g" file3.txt

但这将返回“没有以前的正则表达式”错误。我也尝试过使用for循环将数组索引写入唯一变量,并对变量使用与上面相同的方法

sed "s|$var2|$var1|g" file3.txt

这也失败了

有趣的是,

sed "s|${file2array[0]}|customtext}|g" file3.txt

失败但

sed "s|customtext|${file1array[0]}|g" file3.txt

成功。

任何帮助是极大的赞赏。现在已经为此工作了数十个小时。

约翰1024

尝试:

awk 'FNR==NR{a[FNR]=$0; next} NR<=length(a)+FNR{b[FNR]=$0; next} {for (i=1;i<=length(a);i++) gsub(a[i], b[i])} 1' file2 file1 file3

例如:

$ awk 'FNR==NR{a[FNR]=$0; next} NR<=length(a)+FNR{b[FNR]=$0; next} {for (i=1;i<=length(a);i++) gsub(a[i], b[i])} 1' file2 file1 file3
aws ec2 create-tags --region us-east-1 --resourcesi-XXXXX --tags Key=Developer Name,Value=XXXXX Key=Resource Group,Value=my_custom_tag_1
aws ec2 create-tags --region us-east-1 --resourcesi-XXXX --tags Key=Developer Name,Value=XXXXX Key=Resource Group,Value=my_custom_tag_2

怎么运行的

  • FNR==NR{a[FNR]=$0; next}

    这会将file2中的所有行保存在array中a

    FNR是从当前文件读取的行数。NR是总共读取的行数。因此,如果FNR==NR,我们正在读取第一个命名文件file2a[FNR]=$0将当前行(表示为)添加$0a键FNR下的数组中

    该命令next告诉awk跳过其余命令,然后从头开始next

  • NR<=length(a)+FNR{b[FNR]=$0; next}

    这会将file1的所有行保存在array中b

    在这里,我们使用类似的测试NR<=length(a)+FNR来确定是否正在读取第二个文件。b[FNR]=$0将当前行(表示为)添加$0b键FNR下的数组中

    该命令next告诉awk跳过其余命令,然后从头开始next

  • for (i=1;i<=length(a);i++) gsub(a[i], b[i])

    如果到达这里,我们正在读取第三个文件。这会将与file2中的一行匹配的任何文本替换为file1中的相应文本。

    环路for (i=1;i<=length(a);i++)循环通过在阵列的每一行的行号a

    gsub(a[i], b[i])用text替换所有出现a[i]的text b[i]

    请注意,file2中的文本被视为正则表达式。如果您需要在此文件中包含任何正则表达式有效字符,则应将其转义。

  • 1

    这是awk的在线打印的隐秘缩写。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

sed替换部分字符串

来自分类Dev

用特殊字符替换部分字符串

来自分类Dev

如何替换部分字符串?

来自分类Dev

搜索字符串并替换部分字符串

来自分类Dev

sed用变量替换字符串?

来自分类Dev

用记事本++替换部分字符串,同时保留其余部分

来自分类Dev

Javascript用字符串中的部分替换部分?

来自分类Dev

使用 sed 通过仅引用字符串的开头来替换部分字符串

来自分类Dev

用经典ASP中包含的页面替换部分文本字符串

来自分类Dev

用正则表达式替换部分字符串

来自分类Dev

PHP根据模式用链接替换部分字符串

来自分类Dev

用另一个字符串替换部分字符串会导致段错误

来自分类Dev

在python 2.7中替换部分字符串

来自分类Dev

使用package stringi(regex)替换部分字符串

来自分类Dev

使用XSLT 2在线替换部分字符串

来自分类Dev

如何替换部分未知字符串

来自分类Dev

使用熊猫替换部分字符串

来自分类Dev

如何使用反向引用替换部分字符串?

来自分类Dev

使用php替换部分字符串

来自分类Dev

根据用户输入python替换部分字符串

来自分类Dev

sed-用包含变量的字符串替换?

来自分类Dev

用变量替换部分代码

来自分类Dev

在XML中查找字符串并替换部分字符串

来自分类Dev

如何使用 Python 2.7 从字符串列表中替换部分字符串

来自分类Dev

用sed脚本替换字符串

来自分类Dev

sed用引号替换字符串

来自分类Dev

用sed替换字符串

来自分类Dev

用sed替换多行字符串

来自分类Dev

用sed替换子字符串