以下命令按预期工作,并向我显示找到10位数字的突出显示结果。
# grep '[0-9]\{10\}' test.csv
0987654321,Raka,Nr Man Informatics,Bm ,Bangalore,,26 - 12 - 2010
Rajesh Patel,No 9999 Part Road Town Airlines Bangalore Cell-9702977479,Crv,Bangalore,560051,19 - 7 - 2013
我需要做的是将该数字“提取”到行的开头。看起来应该是这样......
0987654321,0987654321,Raka,Nr Man Informatics,Bm ,Bangalore,,26 - 12 - 2010
9702977479,Rajesh Patel,No 9999 Part Road Town Airlines Bangalore Cell-9702977479,Crv,Bangalore,560051,19 - 7 - 2013
更新
如果没有找到10位数字,那么该行应附加一些虚拟数据,例如: 0000000000(为了一致性目的)
答案 0 :(得分:4)
使用sed的一种方法:
sed 's/.*\([0-9]\{10\}\).*/\1,&/' input
给出:
0987654321,0987654321,Raka,Nr Man Informatics...
9702977479,Rajesh Patel,No 9999 Part Road To...
如果找不到10位数,这个将增加10 0:
sed 's/.*\([0-9]\{10\}\).*/\1,&/;/[0-9]\{10\}/!s/^/0000000000,/' input
答案 1 :(得分:2)
将GNU awk用于\>
字分隔符:
$ cat file
0987654321,Raka,Nr Man Informatics,Bm ,Bangalore,,26 - 12 - 2010
Rajesh Patel,No 9999 Part Road Town Airlines Bangalore Cell-9702977479,Crv,Bangalore,560051,19 - 7 - 2013
foo,bar
long,num,12345678901234
$ gawk -v OFS="," '{print (match($0,/[[:digit:]]{10}\>/) ? substr($0,RSTART,RLENGTH) : "0000000000"), $0 }' file
0987654321,0987654321,Raka,Nr Man Informatics,Bm ,Bangalore,,26 - 12 - 2010
9702977479,Rajesh Patel,No 9999 Part Road Town Airlines Bangalore Cell-9702977479,Crv,Bangalore,560051,19 - 7 - 2013
0000000000,foo,bar
5678901234,long,num,12345678901234
答案 2 :(得分:0)
更好地使用sed
:
sed 's/\(.*\([0-9]\{10\}\).*$\)/\2,\1/'
现在经过测试和工作。请注意,我有两组捕获组 - 一组围绕整个表达式(这是第一个捕获组,称为\1
),另一组(内部)围绕十位数字,参考为\2
。
如果您只想要“可能长于10”的数字的最后十位数字,您可以
sed 's/\(.*\([0-9]\{10\}\)[^0-9].*$\)/\2,\1/'
确保“10位数之后的下一个数字不是数字(从而找到最后的数字)。”