gpt4 book ai didi

regex - 获取一个xml文件中的多个值

转载 作者:太空宇宙 更新时间:2023-11-04 10:09:15 25 4
gpt4 key购买 nike

        <!-- someotherline -->
<add name="core" connectionString="user id=value1;password=value2;Data Source=datasource1.comapany.com;Database=databasename_compny" />

我需要获取 userid 、 password 、 source 、 database 中的值。并非所有行的格式都相同。我想要的结果是 (username=value1,password=value2, DataSource=datasource1.comapany.com,Database=databasename_compny)

这个正则表达式看起来有点复杂,因为它更复杂。请尽可能解释你的答案。

我意识到循环遍历每一行更好。到目前为止我写的代码

while read p || [[ -n $p ]]; do
#echo $p
if [[ $p =~ .*connectionString.* ]]; then
echo $p
fi
done <a.config

现在在 if 中我必须获取值。

最佳答案

对于这个解决方案,我正在考虑:

  • 有些行可以不包含数据
  • 没有分号 ; 位于数据本身(也没有字段名称)
  • 没有等号 = 在数据本身(也没有字段名称)中

您的问题可能的解决方案是:

#!/bin/bash

while read p || [[ -n $p ]]; do

# 1. Only keep what is between the quotes after connectionString=
filteredLine=`echo $p | sed -n -e 's/^.*connectionString="\(.\+\)".*$/\1/p'`;

# 2. Ignore empty lines (that do not contain the expected data)
if [ -z "$filteredLine" ]; then
continue;
fi;

# 3. split each field on a line
oneFieldByLine=`echo $filteredLine | sed -e 's/;/\r\n/g'`;

# 4. For each field
while IFS= read -r field; do

# extract field name + field value
fieldName=`echo $field | sed 's/=.*$//'`;
fieldValue=`echo $field | sed 's/^[^=]*=//' | sed 's/[\r\n]//'`;

# do stuff with it
echo "'$fieldName' => '$fieldValue'";

done < <(printf '%s\n' "$oneFieldByLine")

done <a.xml

说明

General sed replacement syntax :

  • sed 's/a/b/' will replace what matches the regex a by the content of b
  • 第一步

    • -n 参数告诉 sed 如果找不到匹配项则不要输出。在这种情况下,忽略无用 行很有用。
    • ^.* - 行首的任何内容
    • connectionString=" - 字面上的connectionString="
    • \(.\+\)" - 捕获组以存储结束引号之前的任何内容 "
    • .*$" - 直到行尾的任何内容
    • \1 告诉 sed 只用捕获组(只包含引号之间的数据)替换整个匹配
    • p 告诉 sed 打印出替换
  • 步骤 3

    • ;替换为\r\n;它等同于用分号分割,因为 bash 可以循环换行
  • 第 4 步 - 字段名称

    • 替换文字 = 和该行的其余部分什么都没有(它删除它)
  • 第 4 步 - 字段值

    • 替换所有开头不是 = 的字符([^=] 匹配除了 '^' 符号之后的所有字符)直到等于符号什么都没有。
    • 另一个 sed 命令通过替换为空来删除换行符。

关于regex - 获取一个xml文件中的多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50102098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com