我正在编写一个脚本来将变量替换到Java属性文件中,格式为name = value。我有一个源文件,source.env像这样:
TEST_ENV_1=test environment variable one
TEST_ENV_2=http://test.environment.com/one
#this is a comment with an equal sign=blah
TEST_ENV_3=/var/log/test/env/2.log
我的脚本将用“test environment variable one”替换文件dest.env中TEST_ENV_1的每个出现,依此类推。
我正在尝试一次处理一行,并且遇到问题,因为在sed或grep等命令的输出上循环标记为空白而不是整行:
$ for i in `sed '/^ *#/d;s/#.*//' source.env`; do
echo $i
done
TEST_ENV_1=test
environment
variable
one
TEST_ENV_2=http://test.environment.com/one
TEST_ENV_3=/var/log/test/env/2.log
我如何将它们视为线条?我希望能够做的是在“=”符号上拆分每一行,并根据source.env文件制作带有一堆替换正则表达式的sed脚本。
答案 0 :(得分:5)
sed '/^ *#/d;s/#.*//' source.env | while read LINE; do
echo "$LINE"
done
另一种方法是根据@Jim的回答更改$IFS
。在这种情况下最好避免反引号,因为它们会导致整个文件立即被读入,而将sed的输出传递到上面的while
将允许逐行处理文件而不读取整个文件记忆中的东西。