我正在尝试编写一个使用 sed 的脚本,并获取一个文本文件,其中包含区号为 301 的电话号码,后跟 209( 3012093934,(301)2093935,(301)209-3936 )。我必须删除分隔区号和号码的空格、破折号、括号。然后我必须将正确的数字写入另一个文件;正确的号码是指以区号 301 开头、后跟 209 以及正好 4 位数字的号码。
所以我的正则表达式是这样的,但似乎无法正常工作:
sed -n 's/(^301[\- ]*)/(209)/([0-9][0-9][0-9][0-9]$\)/p'
有人可以帮忙吗?提前致谢!!!
答案1
删除所有非数字字符,然后删除未按预期开头的行,最后删除非 10 个字符的行:
sed -e 's/[^0-9]//g' -e '/^301209/!d' -e '/^.\{10\}$/!d'
答案2
我首先使用删除不需要的字符tr
,然后使用过滤grep
:
tr -d '() -'|grep '301209[0-9][0-9][0-9][0-9]$'
答案3
sed -n 's/.*\(301\).*\(209\).*\([0-9]\{4\}\)/\1\2\3/w foobar'
这将删除之前的所有字符301
(以说明(309)
),以及零次或多次出现的空格,并且在忽略任何非数字字符后,)
其后的301
空格恰好为四位数字。209
输出写入到foobar
.
答案4
sed -ne '/^ *\(+1\)\{0,1\} *(\{0,1\} *301 *)\{0,1\} *209 *-\{0,1\}\( *[0-9]\)\{4\} *$/s/[^0-9]*//gp'