我正在使用SIPP服务器模拟器来验证来电。 我需要验证的是来电显示和拨打的数字。我已将此信息记录到文件中,该文件现在包含以下内容:
From: <sip:972526134661@server>;tag=60=.To: <sip:972526134662@server>}
每行。
我想要的是将其修改为仅包含两个电话号码的csv文件,如下所示:
972526134661,972526134662
等等。
我已尝试使用awk -F
命令,但之后我只能使用sip:
作为分隔符,或@
或/
作为分隔符。
虽然,基本上我想要做的是获取以<
开头并以>
结尾的所有字符串,然后获取sip:
分隔符后面的所有字符串。
使用cut
命令也不是一个选项,因为我知道它不能使用字符串作为分隔符。
我想它应该非常简单,但我找不到合适的东西......请感谢帮助,谢谢!
答案 0 :(得分:2)
好的,为了好玩,从您原来的帖子中挑选一些随机数据,并按照您原来想要的方式使用awk -F
。
要注意,因为您的文件是“生成的”,我们可以假设数据的常规格式,而不是期望“短”模式导致错误命中。
[g]awk -F'sip:|@' -v OFS="," '{print $2,$4}' yourlogfile
它使用sip:
和@
作为字段分隔符,通过交替运算符 |
。如果需要,可以轻松扩展它以允许其他字符或字符串也用于分隔输入中的字段。内置变量FS可以包含这样的正则表达式/ regexp。
对于你问题中的第一个样本,它产生了这个:
972526134661,972526134662
对于最新版本(修订版8),并猜测你想要什么:
[g]awk -F'sip:|@|to_number:' -v OFS="," '{print $2,$5}' yourlogfile
产生这个:
from_number,972526134662
[g] awk是因为我在我的机器上使用gawk,并且与awk有相同的行为。
@fedorqui建议使用命令行选项-v来设置输出字段分隔符的值(AWK内置变量,可以使用-v像任何其他变量一样修改)的样式轻微修改并使用逗号分隔打印字段,以便在输出中将它们视为字段,而不是使用硬编码的“,”构建字符串,并将其视为一个字段。
答案 1 :(得分:1)
我建议使用sed来提取这两个数字:
$ sed -n 's/^From: <sip:\([0-9]*\).*To: <sip:\([0-9]*\).*/\1,\2/p' file
972526134661,972526134662
正则表达式匹配以From
开头的行,并捕获<sip:
之后的两个数字。如果空格是可变的,您可能希望将*
添加到这些位置。
答案 2 :(得分:0)
您可以使用正则表达式替换,只要格式保持不变(顺序始终为From / To):
sed -E "s/^.*sip:([0-9]+)@.*sip:([0-9]+)@.*$/\1,\2/"
这不是一个非常具体或完美的解决方案,但在大多数情况下,这样的方法就足够了。