我正致力于解析电子邮件中的短信号码,我遇到了一个问题。我在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}}之后找到任何内容。此外,它不确定在最后一个数字之后是否会换行 - 因此它可能位于两个单独的字符串之间。
谢谢你的帮助。
答案 0 :(得分:3)
grep -o
会让您的生活更轻松:
grep -oE 'SMS: \+([[:digit:]]{3} ?){4}' "$file"
无论在输入的同一行上出现多少匹配,这将在单独的一行上吐出每个匹配。
另外,不要习惯使用ALL_CAPS_VARNAMES。有一天你会意外地使用PATH=...
,然后想知道为什么你的脚本坏了。