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

时间:2017-07-03 08:48:10

标签: bash sed

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

Makefile内容: -

  SUBDIRS = common alarm coders crypto communication conup database \
            dynamicProtocols dynamethods dynamic TTStorage tables \
            jobManager logManager processManager \
            collection processing distribution mediationManager adaptations tools performanceMonitor \
            cli

现在我想将此SUBDIRS值替换为我的文本文件的内容。

文本文件内容: -

         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。如下所示:

     SUBDIRS = database common jobManager coders process

请建议。

1 个答案:

答案 0 :(得分:0)

sed 方法:

sed -z -e 's/\n//g' -e "s/\(SUBDIRS = \).*/\1$(tr '\n' ' ' < words)\n/;" Makefile
  • words是包含的1-20字

  • 的文件名
  • -z - 将输入视为一组行,每行以零字节结尾

  • s/\n//g - 删除Makefile

  • 中的换行符
  • $(tr '\n' ' ' < words) - 将换行符翻译为words文件中的空格

输出:

SUBDIRS = database common jobManager coders process