sed或awk提取整个文件中的电话号码

时间:2015-09-30 13:56:05

标签: regex bash awk sed grep

我正致力于解析电子邮件中的短信号码,我遇到了一个问题。我在bash脚本中使用awk和sed。电话号码的格式为SMS: +XXX XXX XXX XXX。当电子邮件正文中包含此字符串时,我需要发送带主题的短信。到目前为止一切运作良好,但是当一行或多个网络链接上存在多个字符串时,我遇到了问题。目前我正在使用它将电话号码解析为数组,然后创建名称中带有数字的文件。

phone=( $( awk /SMS/ $FILE | awk '{ gsub (" ", "", $0); print}' ) )

单独的行上有短信字符串时工作正常。当一行中有更多字符串时,我需要相同来解析字符串: SMS: +123 456 789 123 SMS: +456 789 123 456 要么 http://somelink/to/some/web/page.html SMS: +123 456 789 123 基本上最好解析整个文件,并在格式为SMS:的{​​{1}}之后找到任何内容。此外,它不确定在最后一个数字之后是否会换行 - 因此它可能位于两个单独的字符串之间。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

grep -o会让您的生活更轻松:

grep -oE 'SMS: \+([[:digit:]]{3} ?){4}' "$file"

无论在输入的同一行上出现多少匹配,这将在单独的一行上吐出每个匹配。

另外,不要习惯使用ALL_CAPS_VARNAMES。有一天你会意外地使用PATH=...,然后想知道为什么你的脚本坏了。