2015-12-20 68 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