从一个文件中复制内容,需要使用 sed 替换到另一个文件中

Copy a content from one file and need to replace in another file using sed

在这里,我们有两个文件。我们需要从文件 1 中复制一个密钥,并需要使用 sed 命令将文件 2 中的密钥替换为特定的字符串“key”。我们尝试了以下命令:

sed -e '3 /key/{r file1' -e 'd}' file2

sed  -n "3 s/key/$(cat file 1 |grep ^Key|cut -d ' ' -f2)/" file2

文件 1

ABCD
EFGH 
Key: qvUkD6QaFBA1jYEpynivMoQx+9V71F4+fdn1TIUKPBNny/3zCnjihd1mwxZg==

文件 2

IJKL
MNOP
secret key;
MNOP

预期结果:

IJKL
MNOP
secret qvUkD6QaFBA1jYEpynivMoQx+9V71F4+fdn1TIUKPBNny/3zCnjihd1mwxZg==;
MNOP

这可能适合您 (GNU sed):

sed -nE '/Key: /{s///;s/\W/\&/g;s#.*#s/"key"/&/#p}' file1 | sed -Ef - file2

从 file1 制作替换命令,不要忘记引用非单词字符。

将 sed 替换命令作为 stdin 传递给通过 -f 选项对 sed 的第二次调用,并使用它来编辑文件 2。

awk

我不确定我的代码对您的使用效率如何。

awk ' /^Key/{q=;next} /A|E/{[=10=]=""; next}/^secret/{="\""q"\";"}1' $file1 $file2
$ awk ' /^Key/{q=;next} /A|E/{[=11=]=""; next}/^secret/{="\""q"\";"}1' $file1 $file2
IJKL
MNOP
secret "qvUkD6QaFBA1jYEpynivMoQx+9V71F4+fdn1TIUKPBNny/3zCnjihd1mwxZg==";
MNOP

在这里,我匹配以 Keysecret 字符串开头的任何行并替换它们的值。

sed

您需要先创建一个变量来获取 key

key=$(sed '1,2d;s/Key: //' $file1)key=$(awk 'NR==3{print }' $file1)

$ echo $key
qvUkD6QaFBA1jYEpynivMoQx+9V71F4+fdn1TIUKPBNny/3zCnjihd1mwxZg==

以下代码将生成您预期的结果,但我再次不确定您的使用效率如何。

sed "/^secret/s|key|$key|" $file2
$ sed "/^secret/s|key|$key|" $file2
IJKL
MNOP
secret "qvUkD6QaFBA1jYEpynivMoQx+9V71F4+fdn1TIUKPBNny/3zCnjihd1mwxZg==";
MNOP