Regex 使用sed从文件中提取数据

Regex 使用sed从文件中提取数据,regex,bash,shell,awk,sed,Regex,Bash,Shell,Awk,Sed,我有一个包含以下行的文件: {u'phone_num':u'9999999',u'name':u'abc',u'format':u'json'} 我正试图从每条线路中提取电话号码,即999999999 我正在使用的sed不工作 echo "{u'phone_num': u'9999999999', u'name': u'abc', u'format': u'json'}" | sed 's/.*phone_num.*\([[:digit:]]\+).*/\1/' 这是打印整行,而不仅仅是数字。

我有一个包含以下行的文件:

{u'phone_num':u'9999999',u'name':u'abc',u'format':u'json'}

我正试图从每条线路中提取电话号码,即999999999

我正在使用的sed不工作

echo "{u'phone_num': u'9999999999', u'name': u'abc', u'format': u'json'}" | sed 's/.*phone_num.*\([[:digit:]]\+).*/\1/'
这是打印整行,而不仅仅是数字。

您可以使用此sed:

sed "s/^{u'phone_num':[[:blank:]]*u'\([^']*\).*$/\1/" file
9999999999

使用awk的另一种解决方案


echo“{u'phone_num':u'9999999',u'name':u'abc',u'format':u'json'}”| awk-F“{print$4}”

为什么不使用cut<代码>回显“{u'phone_num':u'9999999',u'name':u'abc',u'format':u'json'}”| cut-d“'”-f4你能解释一下吗?另外,请让我知道我正在使用的正则表达式不起作用的原因。此正则表达式匹配开头的
u'phone\u num':u'
,并将下一个字符串捕获到后面的引用1中。然后在替换中,它使用
\1
仅输出
9999999999
。此外,如果我需要同时提取姓名和电话号码,该怎么办?感谢您的解释,但这在我尝试以下操作时不起作用:使用此sed获取电话号码和姓名:
echo“$s”\124; sed“s/*phone\u num.*\([[:digit:]*\)'.*name':*u'([^']*\)“.*/\1-\2/”