我有一个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
请建议。
答案 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