用于从 shell 脚本解析文件中的键/值的代码
- 2024-11-11 08:26:00
- admin 原创
- 23
问题描述:
我有一个文件,需要使用 shell 脚本通过键查找值。该文件如下所示:
HereIsAKey This is the value
我怎样才能做这样的事情:
MyVar=Get HereIsAKey
然后 MyVar 应该等于“This is the value”。键没有空格,值应该是键后面空格后面的所有内容。
解决方案 1:
如果HereIsAKey
在您的文件中是唯一的,请尝试使用 grep:
myVar=$(grep -Po "(?<=^HereIsAKey ).*" file)
解决方案 2:
如果一次只需要一个变量,则可以执行以下操作:
#!/bin/bash
cat file | while read key value; do
echo $key
echo $value
done
此解决方案的问题在于:变量仅在循环内有效。因此,不要尝试$key=$value
在循环后使用它。
更新:另一种方法是 I/O 重定向:
exec 3<file
while read -u3 key value; do
eval "$key='$value'"
done
exec 3<&-
echo "$keyInFile1"
echo "$anotherKey"
解决方案 3:
如果您没有支持 Perl 兼容正则表达式的 grep,则以下方法似乎有效:
VAR=$(grep "^$KEY " file | cut -d' ' -f2-)
解决方案 4:
如果文件未排序,查找将会很慢:
my_var=$( awk '/^HereIsAKey/ { $1=""; print $0; exit}' value-file )
如果文件已排序,则可以使用以下方法更快地查找
my_var=$( look HereIsAkey value-file | cut -d ' ' -f 2- )
解决方案 5:
我使用跨多种语言共享的属性文件,我使用一对函数:
load_properties() {
local aline= var= value=
for file in config.properties; do
[ -f $file ] || continue
while read aline; do
aline=${aline//#*/}
[[ -z $aline ]] && continue
read var value <<<$aline
[[ -z $var ]] && continue
eval __property_$var=\"$value\"
# You can remove the next line if you don't need them exported to subshells
export __property_$var
done <$file
done
}
get_prop() {
local var=$1 key=$2
eval $var=\"$__property_$key\"
}
load_properties
从文件中读取文件,为文件中的每一行config.properties
填充一组变量__property_...
,然后 get_prop 允许根据加载的属性设置变量。它适用于大多数需要的情况。
是的,我确实意识到其中有一个评估,这使得用户输入不安全,但是它可以满足我的需要。
解决方案 6:
get () {
while read -r key value; do
if [ "$key" = "$1" ]; then
echo "$value"
return 0
fi
done
return 1
}
这两个返回语句并非绝对必要,但提供了很好的退出代码来指示找到给定键的成功或失败。它们还可以帮助区分“键的值是空字符串”和“未找到键”。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD