1

我正在编写一个脚本来将变量替换到 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

我的脚本会将文件 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 脚本。

4

1 回答 1

5
sed '/^ *#/d;s/#.*//' source.env | while read LINE; do
  echo "$LINE"
done

$IFS另一种方法是根据@Jim 的回答进行更改。在这种情况下最好避免使用反引号,因为它们会导致一次读取整个文件,而将 sed 的输出通过管道传输到while上面将允许逐行处理文件,而无需将整个文件读入内存。

于 2009-10-29T22:45:31.580 回答