2015-12-20 71 views
0

我一直在寻找几个小时来找到一个包含21个数字字符的字符串,并在字符串本身前面放置一个返回值。最后我发现使用的解决方案:Sed:搜索字符串长度和特定字符

sed -r 's/\b[0-9]{21}\b/\n&/g' 

很好用!

现在我有一组新的数据包含21个数字字符,但增加了字符串末尾有一些可变长度为3到10个字符的字母字符。

样品输入:

169349870913736210308ABC 
168232727246529300209DEFGHI 
166587299965005120122JKLMNOPQRS 
162411281984306600005TUVWXYZ 

什么,我想是有数字和字母字符之间的空间:

169349870913736210308 ABC 
168232727246529300209 DEFGHI 
166587299965005120122 JKLMNOPQRS 
162411281984306600005 TUVWXYZ 

请注意这每一个数字开头的16。我已经尝试使用:

sed -r 's/^\b[0-9]{21}\+[A-Z]{3,10}\b/ /g' filename 

但我不能得到它的工作,因为我不知道和不可能发现如何具体搜索包含的数字字符具有特殊长度的英文字母组合的确切数额的字符串。我在这个网站上发现了很多有用的问题,但是这个我找不到。

回答

2

使用捕获组。

sed -r 's/^([0-9]{21})([A-Z]{3,10})$/\1 \2/' filename 
0

为什么不只是添加一个空格前21个字符后,像这样:从左至右第一个非数字字符([^0-9]

sed 's/^...................../& /g' 
1

搜索和在一个空格和匹配替换(&)非数字字符:

sed 's/[^0-9]/ &/' file 

输出:

 
169349870913736210308 ABC 
168232727246529300209 DEFGHI 
166587299965005120122 JKLMNOPQRS 
162411281984306600005 TUVWXYZ