读取字符串直到出现关键字并用另一个字符串替换

读取字符串直到出现关键字并用另一个字符串替换

我是 UNIX 新手,正在练习 shell 脚本编写。我有一个需要字符串搜索和替换的应用程序。

文件1和文件2中有一些行。我有一个搜索关键字。如果文件 1 和文件 2 中都存在该关键字,则文件 2 中关键字后面的字符串应替换为文件 1 中关键字后面的字符串。

例如:

文件1:

abc def ghi jklUNIX是关键

该文件包含 3 行UNIX是关键

文件2:

这是一个例句UNIX在第二个文件中

这是第 2 行,UNIX第二个文件中的新行

关键字是“unix”。这里文件文件1中unix后面的字符串是“is the key”,因此文件2中“unix”后面的字符串(即“在第二个文件中”)应该替换为“is the key” 。所以在字符串读取和替换之后,文件的输出应该如下所示

文件1:

abc def ghi jklUNIX是关键

该文件包含 3 行UNIX是关键

文件2:

这是一个例句UNIX是关键

这是第 2 行,UNIX是关键

我分别使用了以下命令

 grep sed awk

但我无法弄清楚如何将搜索和替换结合起来。任何人都可以告诉我如何完成上述操作。任何建议或帮助将不胜感激。

提前致谢

答案1

这适用于您提供的示例文件

replacement=$(sed -n 's/^.*unix\(.*$\)/\1/p' file1) sed -i "s/^\(.*unix\).*$/\1$replacement/" file2

假设第一个文件在 unix 关键字之后只有一个可能的字符串值,每行只能出现一次。

根据要求,简要解释其工作原理。

这两行应该包含在 shell 脚本中。第一个 sed 的正则表达式提取以下行的部分UNIX第一个文件中的关键字。 替代网变量使用$()命令替换获取该部分,然后在第二行中该变量用于替换第二个文件中关键字之后的行部分。

相关内容