删除字符串直到shell脚本中第二次出现

时间:2016-06-05 01:01:48

标签: linux shell awk

我的shell脚本执行以下操作:

grep '<record' /data/error/usage_20160422_165920.lerr.xml|sed -e 's/&apos;//g'|cut -d ';' -f1,40,43,46

结果将如下所示

<record record_no = "1" error_code="101">;RevShare-2.txt;TWN;1

我想删除xml标记<record record_no = "1" error_code=,结果应该看起来像101;RevShare-2.txt;TWN;1;

记录号码#是动态的。

编辑:我已添加cut -d '=' -f3|tr -d '",>'来实现此目的。这有效,但处理包含20,000条记录的文件需要3秒钟。我每天都有500个文件。有没有更好的方法来加快这个过程?

编辑:这是记录的样子。

<record record_no = "1" error_code="101">&apos;&apos;;&apos;25467&apos;;&apos;&apos;;&apos;&apos;;&apos;FIRSTNAME&apos;;&apos;Manikin&apos;;&apos;1234001&apos;;&apos;12484254823&apos;;&apos;&apos;;&apos;&apos;;&apos;&apos;;&apos;103&apos;;&apos;12484254815&apos;;&apos;XXXXX9680&apos;;&apos;OFX&apos;;&apos;0&apos;;&apos;1028000002130745&apos;;&apos;20160422&apos;;&apos;0000&apos;;&apos;25467&apos;;&apos;20160422&apos;;&apos;Y&apos;;&apos;&apos;;&apos;&apos;;&apos;6&apos;;&apos;2&apos;;&apos;1&apos;;&apos;0&apos;;&apos;&apos;;&apos;263&apos;;&apos;99&apos;;&apos;N&apos;;&apos;&apos;;&apos;Idverifyprod@50&apos;;&apos;136&apos;;&apos;7, 74, 77, 80, 105, 136, 153&apos;;&apos;0&apos;;&apos;&apos;;&apos;501&apos;;&apos;RevShare-2.txt&apos;;&apos;20160422165920&apos;;&apos;000009680&apos;;&apos;TWN&apos;;&apos;1449587762538&apos;;&apos;1&apos;;&apos;1&apos;;&apos;0&apos;;&apos;&apos;;&apos;Verifier&apos;
</record>

2 个答案:

答案 0 :(得分:1)

$ awk '
BEGIN { FS=OFS=";" }
/<record/ {
    gsub(/&apos;/,"")
    gsub(/.*="|">/,"",$1)
    print $1, $40, $43, $46
}
' /data/error/usage_20160422_165920.lerr.xml
101;RevShare-2.txt;TWN;1

答案 1 :(得分:0)

当其他字段没有像error_code这样的字符串时,您可以执行类似

的操作
 | sed 's/.* error_code="[^"]*">/\1/'

你能结合不同的命令吗?像

这样的东西
cut -d ';' -f1,40,43,46 /data/error/usage_20160422_165920.lerr.xml|
   sed -n '/<record/p;s/&apos;//g;s/.* error_code="[^"]*">/\1/'