pur*_*ger 1 bash scripting sed token
我正在编写一个脚本来对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
Run Code Online (Sandbox Code Playgroud)
我的脚本将用"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
Run Code Online (Sandbox Code Playgroud)
我如何将它们视为线条?我希望能够做的是在"="符号上拆分每一行,并根据source.env文件制作带有一堆替换正则表达式的sed脚本.
sed '/^ *#/d;s/#.*//' source.env | while read LINE; do
echo "$LINE"
done
Run Code Online (Sandbox Code Playgroud)
另一种方法是$IFS
根据@Jim的回答进行更改.在这种情况下最好避免反引号,因为它们会导致整个文件立即被读入,而将sed的输出连接到while
上面将允许逐行处理文件而不将整个内容读入内存.