如何从文件中提取数据并根据其中一个值构造文件名

如何从文件中提取数据并根据其中一个值构造文件名

我试图从配置文件中提取两个值并将它们写入新文件。困难的部分是我希望新文件的名称由输入文件中的值之一确定。

我试图提取的值是“Build_Version”和 Docker 名称的四个字母缩写词(“docker_Name”)。例如,如果文件显示docker_Name='bcbs_pr-app-01',我只需要“bcbs”。我想将它们写入具有构建名称的文件,例如bcbs_build.txt.

以下是日志文件的摘录:

nonSSL_port=80  # FOR STAGING 
Build_Type=prod 
Build_Version=9.0.00.01_134143 
docker_Name='bcbs-pr-app-01'

所需的文件输出是

bcbs
9.0.00.01_134143 

我想出了一个sed可以提取我想要的值的命令

sed -n -e '/Build_Version=/p' -e '/docker_Name=/p' environment-info.conf > build_version.txt

但这会完整提取Build_Version=和行,而我只需要 Build_Version 和 docker name 值。docker_Name=我仍然需要弄清楚如何使用四个字母的 Docker 名称首字母缩略词 (bcbs) 来命名该文件。

答案1

该文件看起来像sh语法。因此,如果该文件确实是要在sh脚本中获取的配置文件,只需执行以下操作:

. ./environment-info.conf &&
  printf '%s\n' "${docker_Name%%-*}" "$Build_Version" > "${docker_Name%%-*}_build.txt"

答案2

1) 将sed, 替换为 a) 删除 的第一个单引号docker_Name,b) 删除-pr-app-01'(包括最后一个单引号),c) 删除该<value>=部分:

 sed -n "/Build_Version=/s/.*=//p;/docker_Name=/s/.*=//;s/'//;s/-.*//p"

where/match/s/pattern/replacement/替换patternreplacementat matching 行。如果replacement是空字符串,则它会被有效删除。请注意,我从单引号切换到双引号来处理字符串中的单引号,并且您可以使用通配符* .来匹配更复杂的字符串并将sed命令与分号组合起来。

2)我们将两个结果作为BASH数组读入:

values=( $( sed -n "/Build_Version=/s/.*=//p;/docker_Name=/s/.*=//;s/'//;s/-.*//p" file ) )

地点array=( value1 value2 value3 )$(do this command)

3)我们使用该数组来达到我们的目的,请注意计数器从以下位置开始0

echo ${values[1]} > ${values[1]}
echo ${values[0]} >> ${values[1]}

我们通过数组名称和条目的索引来寻址数组的条目${array[intex]}

答案3

你必须用sed这个吗?grep并且perl可以做你需要的事情。

grep 'Build_Type\|docker_Name' environment-info.conf | perl -pe "s|docker_Name='(.*?)-.*|docker_Name=\1|" > build_version.txt

答案4

您正在寻找一种使用 docker 名称中的四个字母来命名文件的方法。这可以通过以下命令来实现,该命令会将四个字母分配给名为 File_Name 的变量。

File_Name=`cat file | grep "docker_Name" | awk -F"'" '{print $2}' | awk -F'-' '{print $1}'`

正如上面的答案中提到的,下面的命令会将 docker_Name 和 build_version 分配给一个名为 value 的数组:

values=($(sed -n "/docker_Name=/s/.*=//;s/'//;s/-.*//p;/Build_Version=/s/.*=//p" file))

我们以相反的顺序访问数组,以按照您想要的方式捕获输出:

for i in 1 0; do echo ${values[$i]} >> $File_Name.txt; done

文件将准备好您想要的名称,并且 cat 将显示其内容:

% cat bcbs.txt
bcbs
9.0.00.01_134143

相关内容