Linux 之Sed使用

117 阅读1分钟

这是一条通知消息:在每个中包好多个文件,我们要在日志同统计通知了多少个文件,需要将这些文件名提取出来


[INFO] 2017-02-22 23:28:36,070 notfiy info:
<NotifyInfo Id ='1487777316070'>
        <DataCatalog>lte_s10_s11</DataCatalog>
        <WorkMode>WSFTP</WorkMode>
        <SystemID>IPMS</SystemID>
        <ConnectionString>ftp://10.221.245.66</ConnectionString>
        <Path>/20170222/23/lte/s11</Path>
        <UserName>dxpanalysis</UserName>
        <Password>dxpanalysis@123</Password>
        <Files>
            <Filename createTime='2017-02-22T23:28:24'>001_201702222325_0220_07.CSV</Filename>
            <Filename createTime='2017-02-22T23:28:24'>001_201702222325_0227_05.CSV</Filename>
            <Filename createTime='2017-02-22T23:28:24'>001_201702222325_0208_06.CSV</Filename>
            <Filename createTime='2017-02-22T23:28:24'>001_201702222325_0231_05.CSV</Filename>
            <Filename createTime='2017-02-22T23:28:25'>001_201702222325_022f_04.CSV</Filename>
        </Files>
</NotifyInfo> location:com.nokia.business.SendMessage.run(SendMessage.java:94)

如何提取文件名

如果将文件名拆分到单独一行,通过过滤CSV,将>换成换行符,
再将CSV换成CSV\n,那么文件名就单独成行。
我们通过sed替换,实现此功能

<Filename createTime='2017-02-22T23:28:24'>001_201702222325_0220_07.CSV</Filename>

测试:

cat  test  | sed  's/CSV/CSV\n/g' |sed 's/>/\n/g' |grep CSV |wc -l