簡體   English   中英

Unix:使用sed替換多行字符串

[英]Unix: using sed to replace a multi-line string

我有一個這樣的文本文件:

**I**(0,80041,11.03.2014-15:05:05:702+3600,32.IROUTED,317435,iptdm.dtag,0,153452069,241769,80041,1,#00000000000000000000000000000000){
A(**11.03.2014-15:04:59:492+3600**){a=**S9**,0102,,,,,,,,,,,{0,,;},,,,**1.2.3.4:5060**,,,,,,,,,;c=0,17;n=S9;p=255;s=sip;b=;e=0;x=,+498003301000,5.6.7.8,5060,,,,08003301000,sip.test.de,,,tag\=00E0F510024703F9633D883C7650,,+492214711,sip.test.de,,,tag\=as0cd2768d,,+492214711,9.8.7.6,5060,,,,+492214711,sip.test.de,,,,,,,,,,,,,,,,,,,,,,,,1.2.3.4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;mlpp=;o=,,,0,15,0;}
C(**11.03.2014-15:05:02:237+3600**){a=S9,0102,,,,,,,D001,,,,{0,,;},,,,,,LNP_FILLED,RAD_OK,iiap492214711,,**iiai492214711**,,**ii498003301000**,;c=0,17;d=3465;n=S9;p=255;s=sip;x=,+498003301000,5.6.7.8,5060,,,,08003301000,sip.test.de,,,tag\=00E0F510024703F9633D883C7650,,+492214711,sip.test.de,,,tag\=as0cd2768d,,+492214711,9.8.7.6,5060,,,,+492214711,sip.test.de,,,,,,,,,,,,,,,,,,,,,,,,1.2.3.4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;mlpp=;o=11,D001,,2,15,0;}
V(11.03.2014-15:05:05:702+3600){i=498003301000;k=teles;l=21f6f14f-a926-11e3-ad91-00e0f5100247,21f6f14f-a926-11e3-ad91-00e0f5100247,;m=toner,voip;q=9.8.7.6,g711alaw;qc=1,,0,g711alaw:g711ulaw:g723r63:g723ar63:g729r8:g729ar8:g729br8:g729abr8:clearmode,echo,auto,30,7,32,27,32,0,0,0,20,4294967295,rfc2833,96,red,force,both,,,,;qi=3,1.2.3.4,5060,9.8.7.6,5060,g711alaw;qs=2,132,172,21120,27520,4294967295,0,4294967295,0,0;tud=,D001,,,,;ivr=,;h323=,,,,0:0:0;sip=4b211f615c1edd2e19ee10296df8a177@sip.test.de;}
D(**11.03.2014-15:05:05:702+3600**){f=A,CAU_NCC,LOC_PUBL_NTWK_SERV_REM_USER,CAU_NCC,LOC_PUBL_NTWK_SERV_REM_USER;t=S,CAU_NCC,LOC_PUBL_NTWK_SERV_REM_USER,CAU_NCC,LOC_PUBL_NTWK_SERV_REM_USER;a=S9,0102,,,,,,,D001,,,,{0,,;},,,,,,LNP_FILLED,RAD_OK,iiap492214711,,iiai492214711,,ii498003301000,;x=,+498003301000,5.6.7.8,5060,,,,08003301000,sip.test.de,,,tag\=00E0F510024703F9633D883C7650,,+492214711,sip.test.de,,,tag\=as0cd2768d,,+492214711,9.8.7.6,5060,,,,+492214711,sip.test.de,,,,,,,,,,,,,,,,,,,,,,,,1.2.3.4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;o=11,D001,,2,15,0;}
E(11.03.2014-15:05:05:702+3600){g=;}
}

我想grep每條腿的某些字段,然后將它們放入sed或awk的csv文件中:

I,11.03.2014-15:04:59:492+3600,S9,1.2.3.4:5060,11.03.2014-15:04:59:492+3600,iiai492214711,ii498003301000,11.03.2014-15:05:05:702+3600

我的嘗試:

sed 's/\([IO]\)(.*){
A(\(.*\)){a=\(.*\),.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,{.*,.*,.*;},.*,.*,.*,\(.*\),.*}
.*
C(\(.*\)){a=.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,{.*,.*,.*;},.*,.*,.*,.*,.*,.*,.*,.*,.*,\(.*\),.*,\(.*\),.*}
D(\(.*\)){.*}
.*
}/\1,\2,\3,\4,\5,\6,\7,\8' file

如何使用sed將此正則表達式字符串使用多於一行?

試試這個

sed -n '/[*][*]I.*{/,/^}/ {
   /^[*][*]I/ {s/^[^,]*,\([^,]*\),.*/I,\1/;h;}
   /^A/   {s/^[^=]=[*][*]\([^*]*\)[*][*]\.*[*][*]\([^*]*\)[*][*].*/\1,\2/;H;}
   /^B/   {#extract what you want on this line }
   ...
   /^}/ {g;s/\n/,/p;}
   }' YourFile

您提取的有用信息(在I組)行的每一個部分,有獨立的,其添加到保持緩沖區和結束,召回(各行)的緩沖區,並更換了新的生產線,然后PRNT結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM