Regex 命令打印电话号码,方法是用括号将区号(电话号码的前3位数字)突出显示
注意 文件中可能有一些记录缺少姓名,只有电话号码,反之亦然。这些记录应视为无效记录,不应显示在输出中。甚至不应在这些记录的输出中键入空行 样本输入:Regex 命令打印电话号码,方法是用括号将区号(电话号码的前3位数字)突出显示,regex,awk,sed,formatting,phone-number,Regex,Awk,Sed,Formatting,Phone Number,注意 文件中可能有一些记录缺少姓名,只有电话号码,反之亦然。这些记录应视为无效记录,不应显示在输出中。甚至不应在这些记录的输出中键入空行 样本输入: Danish 5555551212 3456782 Bulbul 5555551213 Kaloana 5555551214 Tina 6665551215 Cj Mayuri 6665551216 输出: (555)5551212 (555)5551213 (555)5551214 (666)5551215 (666)5551216 霉菌代码
Danish 5555551212
3456782
Bulbul 5555551213
Kaloana 5555551214
Tina 6665551215
Cj
Mayuri 6665551216
输出:
(555)5551212
(555)5551213
(555)5551214
(666)5551215
(666)5551216
霉菌代码:
BEGIN {FS=" ";c=0;}
{
if(NF>1)
{
s[c]=$2;
c=c+1
}
}
END{
for (i=0;i<c;i++)
{
print s[i]
}
}
BEGIN{FS=”“;c=0;}
{
如果(NF>1)
{
s[c]=2元;
c=c+1
}
}
结束{
对于(i=0;i,使用GNU awk。使用正则表达式(^[0-9]+$
)检查)如果第二列仅包含数字,请打印第二列:
awk '$2~/^[0-9]+$/{print $2}' file
输出:
5555551212
5555551213
5555551214
6665551215
6665551216
(555)5551212
(555)5551213
(555)5551214
(666)5551215
(666)5551216
输出:
5555551212
5555551213
5555551214
6665551215
6665551216
(555)5551212
(555)5551213
(555)5551214
(666)5551215
(666)5551216
(555)5551212
(555)5551213
(555)5551214
(666)5551215
(666)5551216
这可能适用于您(GNU-sed):
关闭隐式打印-n
匹配有效电话号码时,请将前3位数字用括号括起来,并仅打印号码
解决方案包括一个替换命令,格式为s/LHS/RHS/
,其中RHS/LHS代表右侧/左侧
LHS是与模式空间中的内容相匹配的regexp,即当前行在其换行符被删除后放置在其中的缓冲区
RHS是放置LHS中匹配的替换件的位置
/
是替换命令的分隔符,通常使用/
,但它几乎可以是任何其他字符,例如.
,:
或%
正则表达式或正则表达式由^\S+\S([0-9]{3})([0-9]+)$
^
表示行首的位置,$
同样表示行尾的位置
\S
表示非空白字符它是\S
的对偶,表示空白字符,例如空格或制表符
+
表示前面的一个或多个字符(或组),*
几乎相同,只是它表示零个或多个,?
表示可选的(零个或一个),而{3}
正好表示3。因此x{3}
与xxx
相同
(…)
表示一个组,…
可以是文字字符,字符类、组、替换、反向引用或它们的组合。可以稍后在替换命令的LHS或RHS中引用该组,它们从左到右编号为\1
到\9
,因此(abc)\1\1
表示abcabc
[0-9]
是从0
到9
的数字字符类
因此,LHS的意思是:从行首开始,后跟一个或多个非空格字符,后跟一个空格字符,后跟一个3位数的分组(\1
),后跟一个或多个位数的分组(\2
),后跟行尾
RHS表示:文字(
,后跟第一组,即电话号码的前3位,后跟文字)
,后跟第二组,即电话号码的剩余数字
如果替换成功,则替换的结果将打印到标准输出,因为存在p
标志。由于-n
选项正在运行,这意味着只打印匹配的行。请尝试以下内容。仅使用显示的样本链接编写和测试
awk '
NF==2 && match($2,/^[0-9]{3}/){
print "(" substr($2,RSTART,RLENGTH) ")" substr($2,RSTART+RLENGTH)
}
' Input_file
说明:检查条件ifNF
为2意味着如果行有2个字段,第2个字段以3位数字开头,则执行以下操作。打印(然后是第2个字段的3位子字符串,然后打印)和行的其余部分