Regex Unix:使用sed替换多行字符串

Regex Unix:使用sed替换多行字符串,regex,sed,Regex,Sed,我有这样一个文本文件: **I**(080041,11.03.2014-15:05:05:702+3600,32.IROUTED,317435,iptdm.dtag,015345206924176980041,1,#00000000000000000000){ A(**11.03.2014-15:04:59:492+3600**){A=**S9**,0102,,,,,,,,,,{0,,;},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

我有这样一个文本文件:

**I**(080041,11.03.2014-15:05:05:702+3600,32.IROUTED,317435,iptdm.dtag,015345206924176980041,1,#00000000000000000000){
A(**11.03.2014-15:04:59:492+3600**){A=**S9**,0102,,,,,,,,,,{0,,;},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、mlpp=;o=、、、、0,15,0;}
C(**11.03.2014-15:05:02:237+3600**){a=S90102,,,,,,D001,,,,,,,{0,,;},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1.2.3.4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,mlpp=;o=11,D001,2,15,0;}
(11.03.2014-15:05:05:702+3600)据英国媒体报道,目前他们的身份是:i=i=49498003300 0 0 0 0 0 7 7 7 7 7 7 7-10 10 10 10 10 10 10 10 10 10 10 10 10 10 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 0 0 0 0 0 0 0 0 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 G.2.3.45060,9.8.7.65060,g711alaw;qs=213217221120275204294967295,04294967295,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撴U REM撴用户,CAU NCC,LOC撴PUBL撴U REM撴用户,CAU NCC,LOC撴PUBL撴撴撴用户,CAU NCC,LOC撴PUBL撴撴撴撴用户,CAU NCC,LOC撴撴PUBL撴撴撴撴25780,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,o=11,D001,,2,15,0;}
(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: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组)提取想要的信息,用
分开,将其添加到保留缓冲区,最后调用缓冲区(每行)用一个
替换新行,然后重新打印结果

这似乎是一个
awk
作业。发布示例数据和您想得到的内容,我们可以查看一下。我会切换到一种更强大的语言,例如Perl。您能添加一个示例输出吗?我只是在帖子中添加一些示例数据。您是否可以使用一种字段模式nt抓取?在任何语言中,从随机行获取随机内容都是很困难的。嗯,我在示例数据中使用“**”只是为了说明,这就是我想要grep的值。此外,“a=”在a(…){a=…}中是固定的,就像“a=”在C(…){a=…}中也是一样。**是一个特殊的字符,我忘了,使用[][]改为**。我更改回复代码