用于从 shell 脚本解析文件中的键/值的代码

2024-11-11 08:26:00
admin
原创
23
摘要:问题描述:我有一个文件,需要使用 shell 脚本通过键查找值。该文件如下所示:HereIsAKey This is the value 我怎样才能做这样的事情:MyVar=Get HereIsAKey 然后 MyVar 应该等于“This is the value”。键没有空格,值应该是键后面空格后面的所有...

问题描述:

我有一个文件,需要使用 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
}

这两个返回语句并非绝对必要,但提供了很好的退出代码来指示找到给定键的成功或失败。它们还可以帮助区分“键的值是空字符串”和“未找到键”。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用