如何使用bash脚本从文本文件替换一个文件中的变量值?

如何使用bash脚本从文本文件替换一个文件中的变量值?,bash,sed,Bash,Sed,我有一个Makefile,我想在运行时用bash脚本更改/替换变量的值 生成文件内容:- SUBDIRS = common alarm coders crypto communication conup database \ dynamicProtocols dynamethods dynamic TTStorage tables \ jobManager logManager processManager \ coll

我有一个Makefile,我想在运行时用bash脚本更改/替换变量的值

生成文件内容:-

  SUBDIRS = common alarm coders crypto communication conup database \
            dynamicProtocols dynamethods dynamic TTStorage tables \
            jobManager logManager processManager \
            collection processing distribution mediationManager adaptations tools performanceMonitor \
            cli
         database
         common
         jobManager
         coders
         process
现在我想用文本文件的内容替换这个SUBDIRS值

文本文件内容:-

  SUBDIRS = common alarm coders crypto communication conup database \
            dynamicProtocols dynamethods dynamic TTStorage tables \
            jobManager logManager processManager \
            collection processing distribution mediationManager adaptations tools performanceMonitor \
            cli
         database
         common
         jobManager
         coders
         process
此文本文件内容可能在1-20个单词之间变化

现在,正如在另一个线程中所建议的,我们对单个单词使用以下解决方案:-

        sed -r 's/(SUBDIRS = ).*/\1protocols/' Makefile
但这只是用“协议”取代了第一行。生成的输出为:-

      SUBDIRS = protocols
                dynamicProtocols dynamethods dynamic TTStorage tables \
                jobManager logManager processManager \
                collection processing distribution mediationManager adaptations tools performanceMonitor \
                cli
而期望的输出是:-

           SUBDIRS = protocols
现在,我们要读取文本文件的所有内容并分配给子目录。如下所示:

     SUBDIRS = database common jobManager coders process
请建议。

sed方法:

sed -z -e 's/\n//g' -e "s/\(SUBDIRS = \).*/\1$(tr '\n' ' ' < words)\n/;" Makefile

谢谢你的回复。这在某种程度上是可行的,但当我运行此命令时,它会显示在下面,并且不会将更改保存到原始Makefile中。输出即将到来:它正在使我们完整的makefile新行消失。ifeq($(UNAME_SYSTEM),SunOS)SUBDIRS=公共数据库通信进程,它在第一次发生时替换后退出。我最后也应用了“g”,但不起作用。@user3256114,它使我们完整的makefile新行消失了-如果您发布了完整的
makefile
内容,为什么会出现问题?您需要添加-I来实际更新Makefile@RomanPerekhrest我们不想修改整个Makefile。生成构建不会像那样工作。我们只希望Makefile中的变量用新值重新计算。所以我不能用空格来替换换行符。而且,一旦变量的第一个出现被替换并且Makefile不完整,它就会退出。