当前位置: 首页 > 面试题库 >

如何使用Shell脚本读取包含带有句点字符的键的.properties文件

时恩
2023-03-14
问题内容

我正在尝试从shell脚本读取属性文件,该脚本包含一个句点(。)字符,如下所示:

# app.properties
db.uat.user=saple user
db.uat.passwd=secret


#/bin/sh
function pause(){
   read -p "$*"
}

file="./app.properties"

if [ -f "$file" ]
then
    echo "$file found."
 . $file

echo "User Id " $db.uat.user
echo "user password =" $db.uat.passwd
else
    echo "$file not found."
fi

我尝试在获取文件后解析文件,但由于键包含“。”,因此无法正常工作。字符,并且该值中也有空格。

我的属性文件始终位于脚本的同一目录中或/ usr / share / doc中的某个位置


问题答案:

由于(Bourne)Shell变量不能包含点,因此可以用下划线替换它们。阅读每一行,翻译。在_和评估的关键。

#/bin/sh

file="./app.properties"

if [ -f "$file" ]
then
  echo "$file found."

  while IFS='=' read -r key value
  do
    key=$(echo $key | tr '.' '_')
    eval ${key}=\${value}
  done < "$file"

  echo "User Id       = " ${db_uat_user}
  echo "user password = " ${db_uat_passwd}
else
  echo "$file not found."
fi

请注意,以上仅翻译。到_,如果您使用更复杂的格式,则可能需要使用其他翻译。最近,我不得不解析一个包含许多讨厌字符的完整Ant属性文件,在那我必须使用:

key=$(echo $key | tr .-/ _ | tr -cd 'A-Za-z0-9_')


 类似资料:
  • 当我使用opencsv读取csv文件时,它在字符串末尾遇到\时无法正常工作。它使字符串的"部分,而不是'\',因为我想。我想一定有什么方法可以添加另一个\,让它转义\字符?无需手动编辑csv文件。我找过了,但什么也没找到。 为了澄清我的问题,看起来是这样的: csv文件 我的代码看起来像这样(不是真的,但它显示了我的问题): 我想把它解析成一个String[],每行有4个元素,但是最后一行只解析成

  • 问题内容: 当我使用opencsv读取csv文件时,在字符串末尾遇到“ \”时,它无法正常工作。它使字符串的一部分成为“”,而不是我想要的“ \”。我猜必须使用某种方法来添加另一个“ \”以使其转义为“ \”字符吗?而 无需 手动编辑csv文件。我已搜索但未找到任何内容。 为了澄清我的问题,它看起来像这样: CSV文件 我的代码看起来像这样(不是真的,但是它显示了我的问题): 我希望将此解析为每行

  • 问题内容: 这是与许多人相似的问题,但并不完全相同。我有一个文本文件,其中包含约40万行文本。每行本质上都是一个列表。例如看起来 我可以使用以下代码读取文本文件的每一行: 问题是每行都被读取为字符串。我想获取列表中的每个项目。所以我想我会做(针对每一行): 这几乎可行,但是我遇到了问题。在我的文本文件中,很多时候我在列表中都有一个字符串,其中有一个逗号(从上面我有’d and,e string’)

  • 问题内容: 我想要类似C的选项。如何仅从命令行读取单个字符输入? 使用命令可以做到吗? 问题答案: 在ksh中,您基本上可以执行以下操作:

  • 问题内容: 我正在尝试使用csv文件读取文件,但某些字段是包含逗号的字符串。字符串用引号引起来,但是numpy不能将引号识别为定义了单个字符串。例如,使用“ t.csv”中的数据: 编码 产生错误: ValueError:检测到一些错误!第2行(获得4列而不是3列) 我正在寻找的数据结构是: 查看文档,我看不到任何解决方案。有没有办法用numpy做到这一点,或者我只需要使用模块读入数据,然后将其转

  • 我有一个源代码,它读取文本文件并存储到一个元组类型的向量中: 包含以下数据: 因此数据由空格+垂直线+空格(多重分隔符)分隔。 如何更改源代码以处理多个分隔符? 注意:如果数据仅用空格隔开,则程序可以工作。