我有一个~300mb的文本文件,里面装满了星号呼叫,需要发送给客户,尽管不能包含特定信息,
我想提取的唯一信息如下;
星号*NUMBER#NUMBER,sip-out*
之间的一切
我正在考虑在文件上使用类似于.*#(d+),sip-out.*
的awk numbers.txt
虽然我的格式有点错误。 有什么想法吗?
目标是在屏幕上打印出来,n
在上述星号之间。
提前谢谢。
艾希礼
也许这个gnu awk
(由于 RS)会得到正确的数据?
awk -v RS=",sip-out" 'NF{print $NF RS}' file
猫文件
some data 123456#624634763,sip-out more data
just 223456#624634763,sip-out more
not this line
1234666#62468883,sip-out
给这个
123456#624634763,sip-out
223456#624634763,sip-out
1234666#62468883,sip-out
如果您不喜欢sip-out
文本,只需像这样从print
中删除RS
:
awk -v RS=",sip-out" 'NF {print $NF}' file
123456#624634763
223456#624634763
1234666#62468883
使用 grep 和 o 选项。
grep -o "*.**" file
egrep -o '*[0-9]+#[0-9]+,sip-out*' numbers.txt | tr -d '*'
- 使用
egrep -o
仅提取所有感兴趣的子字符串,包括封闭*
字符。 - 然后删除封闭的
*
字符。 使用tr
。
注意:有了GNU grep
,你可以通过使用环顾四周的断言来摆脱grep
命令:
grep -Po '(?<=*)[0-9]+#[0-9]+,sip-out(?=*)' numbers.txt