使用shell脚本格式化xml文件输出

xml文件内容

test.xml 文件

<appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out" />
        <param name="threshold" value="debug" />
        <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}][%-5p](%c.%M:%L) - %m%n" />
        </layout>
</appender>

要求输出的内容:
name=console
class=org.apache.log4j.ConsoleAppender

shell脚本处理程序 :

checkXml.sh

# 使用方法checkXml.sh ,输出name=console
filepath='/app/install/shell/test.xml'

checkXml(){
    grep -oP "<appender[^>]+$1=\"\K[^\"]+(?=\"\s*[c>])" $filepath
}

NAME=`checkXml name`
CLASS=`checkXml class`


echo "name=${NAME}"
echo "class=${CLASS}"

执行输出结果 :

[root@shell]# ./checkXml.sh 
name=console
class=org.apache.log4j.ConsoleAppender

脚本程序说明:

  grep -oP "<appender[^>]+$1=\"\K[^\"]+(?=\"\s*[c>])" $filepath

-o : 精确匹配,不输出整行,只输出匹配的字符内容

\K:模式使用,(1)\K(?=b) ,如果(1)元组条件达到,则进行匹配输出直到达到(?=b)结束

"<appender[^>]+$1=\"    :匹配到参数, <appender包含 。<appender[^>] , 包含<appender,不以<appender>结束 。 + 是一个以上的字符 。 $1=\"  传入参数=“,则是配置到左边的引号

\K之后直到(?=b)的部分,则输出匹配的中间的部分,也就是输出这一部分[^\"]+   ,不以”开始, + 一个或多个字符 。 直到(?=\"\s*[c>])结束 。\" 是引号, \s空白字符  * 使用的0个或多个字符 ,[c>]  c或>结尾 。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值