从一个文件中复制内容,需要使用 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
在这里,我匹配以 Key
和 secret
字符串开头的任何行并替换它们的值。
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
在这里,我们有两个文件。我们需要从文件 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
在这里,我匹配以 Key
和 secret
字符串开头的任何行并替换它们的值。
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