Regex Sed或awk在整个文件中提取电话号码

Regex Sed或awk在整个文件中提取电话号码,regex,bash,awk,sed,grep,Regex,Bash,Awk,Sed,Grep,我正在分析电子邮件中的短信号码,我遇到了一个问题。我正在bash脚本中使用awk和sed。电话号码的格式是短信:+XXX XXX XXX XXX。当这个字符串包含在电子邮件正文中时,我需要发送带有主题的短信。到目前为止一切都很好,但我遇到了一个问题,当一行或某个web链接上出现多个字符串时。目前,我正在使用它将电话号码解析为数组,然后创建名为number的文件 phone=( $( awk /SMS/ $FILE | awk '{ gsub (" ", "", $0); print}' ) )

我正在分析电子邮件中的短信号码,我遇到了一个问题。我正在bash脚本中使用awk和sed。电话号码的格式是
短信:+XXX XXX XXX XXX
。当这个字符串包含在电子邮件正文中时,我需要发送带有主题的短信。到目前为止一切都很好,但我遇到了一个问题,当一行或某个web链接上出现多个字符串时。目前,我正在使用它将电话号码解析为数组,然后创建名为number的文件

phone=( $( awk /SMS/ $FILE | awk '{ gsub (" ", "", $0); print}' ) )
当单独的行上有SMS字符串时,工作正常。当一行上有更多字符串时,我需要同样的方法来解析字符串:
SMS:+123 456 789 123 SMS:+456 789 123 456
http://somelink/to/some/web/page.html 短信:+123 456 789 123
基本上,最好是解析整个文件,并在
SMS:
之后找到格式为
+XXX-XXX-XXX-XXX
的任何内容。此外,还不确定最后一个数字之后是否会换行,所以它可能位于两个单独的字符串之间。
感谢您的帮助。

grep-o
将使您的生活更轻松:

grep -oE 'SMS: \+([[:digit:]]{3} ?){4}' "$file"
这将在一个单独的行上吐出每个匹配项,不管输入中有多少匹配项出现在同一行上


此外,要摆脱使用所有大写字母和大写字母的习惯。有一天你会意外地使用
PATH=…
,然后想知道为什么你的脚本会被破坏。

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

grep -oE 'SMS: \+([[:digit:]]{3} ?){4}' "$file"
这将在一个单独的行上吐出每个匹配项,不管输入中有多少匹配项出现在同一行上


此外,要摆脱使用所有大写字母和大写字母的习惯。有一天你会意外地使用
PATH=…
,然后想知道为什么你的脚本会被破坏。

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

grep -oE 'SMS: \+([[:digit:]]{3} ?){4}' "$file"
这将在一个单独的行上吐出每个匹配项,不管输入中有多少匹配项出现在同一行上


此外,要摆脱使用所有大写字母和大写字母的习惯。有一天你会意外地使用
PATH=…
,然后想知道为什么你的脚本会被破坏。

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

grep -oE 'SMS: \+([[:digit:]]{3} ?){4}' "$file"
这将在一个单独的行上吐出每个匹配项,不管输入中有多少匹配项出现在同一行上



此外,要摆脱使用所有大写字母和大写字母的习惯。有一天你会意外地使用
PATH=…
,然后想知道为什么你的脚本会被破坏。

你可以通过
sed's/SMS/\nSMS/g'
进行输入,这只是一个预先步骤。然后,输入中以
SMS
开头的所有内容都将从新行开始。可能会解决您的问题。请阅读awk的基础知识。您正在使用管道显示您甚至还没有阅读它的基本命令。您可以通过
sed's/SMS/\nSMS/g'
管道输入,这只是一个预步骤。然后,输入中以
SMS
开头的所有内容都将从新行开始。可能会解决您的问题。请阅读awk的基础知识。您正在使用管道显示您甚至还没有阅读它的基本命令。您可以通过
sed's/SMS/\nSMS/g'
管道输入,这只是一个预步骤。然后,输入中以
SMS
开头的所有内容都将从新行开始。可能会解决您的问题。请阅读awk的基础知识。您正在使用管道显示您甚至还没有阅读它的基本命令。您可以通过
sed's/SMS/\nSMS/g'
管道输入,这只是一个预步骤。然后,输入中以
SMS
开头的所有内容都将从新行开始。可能会解决您的问题。请阅读awk的基础知识。事实上,你是管道显示你甚至没有读过它的基本命令。我会使用
grep-o'^SMS\+[0-9]*[0-9]
,只是为了(对我来说)也允许使用有效的数字,比如
SMS+49 152 30423423
,但这取决于PO必须编码的确切规格。@Alfe它没有返回任何东西。使用导出的电子邮件正文对文件进行测试-多行带有SMS:和number。@marty,从Alfe的正则表达式中删除前导的
^
。当然,是的。我以前的想法是每次发短信时都要断线,这一点很有道理。很抱歉。@Alfe@glenn jackman-我已经测试过了,但仍然不起作用。使用此
grep-o'SMS\+[0-9]*[0-9]'
并通过文件中的cat将内容传送到此文件,但这应该不是问题。-已解决-缺少冒号-这可以使用
grep-oE'SMS:\+[0-9]*[0-9]'
我会使用
grep-o'^SMS\+[0-9]*[0-9]'
来代替,只是为了允许(对我来说)像
SMS+49 152 30423423
这样的有效数字,但这取决于PO必须编码的确切规格。@Alfe它不会返回任何东西。使用导出的电子邮件正文对文件进行测试-多行带有SMS:和number。@marty,从Alfe的正则表达式中删除前导的
^
。当然,是的。我以前的想法是每次发短信时都要断线,这一点很有道理。很抱歉。@Alfe@glenn jackman-我已经测试过了,但仍然不起作用。使用此
grep-o'SMS\+[0-9]*[0-9]'
并通过文件中的cat将内容传送到此文件,但这应该不是问题。-已解决-缺少冒号-这可以使用
grep-oE'SMS:\+[0-9]*[0-9]'
我会使用
grep-o'^SMS\+[0-9]*[0-9]'
来代替,只是为了允许(对我来说)像
SMS+49 152 30423423
这样的有效数字,但这取决于PO必须编码的确切规格。@Alfe它不会返回任何东西。使用导出的电子邮件正文对文件进行测试-多行带有SMS:和number。@marty,从Alfe的正则表达式中删除前导的
^
。当然,是的。我以前的想法是每次发短信时都要断线,这一点很有道理。很抱歉。@Alfe@glenn jackman-我已经测试过了,但仍然不起作用。使用此
grep-o'SMS\+[0-9]*[0-9]'
并通过文件中的cat将内容传送到此文件,但这应该不是问题。-已解决-缺少冒号-此操作有效
grep-oE