如何使用bash脚本创建,解析和更新文件?有可能吗?

问题描述

是否可以使用bash编写,解析和更新任何类型的文件。从任何类型的角度来看,文件可以是csv,json或其他格式。可以说,我从bash脚本获得了有关网站的详细信息,并且想写入文件,因此在bash脚本结尾处的bash中看起来像这样。

db="MongoDB"
frontend="Angular"
backend="PHP"

我想写一个文件,比如说csv

db,MongoDB
frontend,Angular
backend,PHP

稍后,我应该能够使用bash脚本解析该文件,因此在解析bash脚本中的${db}${frontend}${backend}变量之后,应该从文件中进行更新。此外,如果可能我应该能够更新任何行,例如当我想要更新前端而不是覆盖时,我可以做update filename.file frontend data或类似的事情。有谁知道如何实现类似的目标。它的外部工具或其他工具无关紧要,但应该可以在bash中实现。

编辑:因此,我的第一个bash脚本从不同的来源收集数据,并以任何格式保存在/ root / config。中。现在我有很多其他bash脚本,应该解析/root/config.whattheformat,然后根据文件内容设置变量。 (可选)无论格式如何(例如说有50行,第45行中都有关于服务器的数据(让我们说文件格式为csv)),我都应该能够轻松地更新config.what,然后从bash脚本中我应该执行类似{{1 }}或类似。然后,它遍历每一行,并将第45行的第2列更新为“ Nginx”,因为第45行的第一列为“服务器”。

此处CSV只是为了简化起见。如果某些工具或技术可以创建,更新和解析json,那么我使用它就不会有问题。

解决方法

我的意思是,如果特定行的第一列包含服务器,则它应使用nginx更新该特定行的第二列。那就是更新部分。有没有其他工具可以做到

?francois@?zaphod?:~/tmp/test$ line=db
?francois@?zaphod?:~/tmp/test$ change=psql
?francois@?zaphod?:~/tmp/test$ while read ; 
> do 
> sed -i "/$line/ s/,.*$/,$change/" titi
> done < toto
?francois@?zaphod?:~/tmp/test$ cat titi
db,psql
frontend,Angular
backend,PHP
?francois@?zaphod?:~/tmp/test$ 

作为脚本,它会喜欢

#!/bin/bash 
#-ex for debug

file=$1
line=$2
change=$3

#add function to check file exists if so continue

#add function to save file before change

while read ; do 
sed -i.bak "/$2/ s/somethingpattern/$3/" $1  #select line then substitute second part 
done < $1

#add error conditions 

exit 0