我试图找到夹在数字汤中相同数字之间的单词。它们可以在其他地方被数字打断,但它们必须以相同的数字开头和结尾。例如:
936694753355715720418156005497888680833462758860829*9ang0io752901403085mat93a9*535
血管瘤夹在两个9s之间。
936694753355715720418156005497888680833462758860829*9ang0io752901403085mat93a7*535
在上述情况下,它是不正确的,因为它以9开头但以7结尾。
这是一个.txt文件,不包含任何空格。每行的长度相同,只包含小写字母和数字。我在第一个和最后一个数字之间得到字母和数字,但是不知道如何取彼此相等的第一个和最后一个数字。谢谢你提前做好一切。
到目前为止我得到了什么:
$ egrep "[[:digit:]]{1}[a-z]+(.*)[a-z][[:digit:]]{1}" .txt
文件中的几行:(第9行有我要寻找的东西-1ac31069383748462343642622383007520ou280685412598707stical1-1acoustical1)
8659143296aconite931031567290592196372720165714862606068549452875678894011583394
429537968991065280440972955773783975aconite405304426503915937177910674938356s995 165730080656179172282158326723459395151887a197343544312497429322conitic971943257
242700348160683825750220278124532230615414861aconi0423t2209041629um7534201414279 8095795129421424035773aconit51122048059352421754855393594um083s57745637407177073 203520740229811376acor4730n05675830009456231936341628077162200687753246324478764 0047610666820884722216474722512324028387365649588049630aco5307rns847715766988588 568901339322354170088854729578680996027154709227496061907093046a199546373coustic 293915167531ac31069383748462343642622383007520ou280685412598707stical13002190096 83982473352438654261757963864323333acou021534520556605043806stical2223ly16922171 02309730655acousti3490661184937075557973850179cia014890505513865828185722n085724 26480962052acousti87311144532313023833020698187076874569358847788485c8205ians518 24711482467426173614aco00496247639921262483584020ustic92007815150348941694311s0 8
答案 0 :(得分:1)
仅允许从行开头到第一个[a-z]
之间的数字。我会使用grep -oP
之类的
^\d*\K(\d)[a-z](?>\d*[a-z]+)*\1
^
行的开头\d*
,任意数量的数字和\K
resets比赛的开始(\d)
之前的一个[a-z]
一个(?>\d*[a-z]+)*
\1
任意数量的atomic group,直到满足captured armeabi-v7a
答案 1 :(得分:0)
这是您想要做的:
grep -oP '^\d*\K(\d)[a-z]\w+[a-z]\1' file.txt
输出: (来自您的示例)
1ac31069383748462343642622383007520ou280685412598707stical1
选项:
。 -o, --only-matching
仅打印匹配行的匹配(非空)部分,每个这样的部分都在单独的输出行上。
。 -P, --perl-regexp
将模式解释为与Perl兼容的正则表达式(PCRE)。这是高度试验性的,grep -P可能会警告未实现的功能。
正则表达式:
^ # beginning of line
\d* # 0 or more digits
\K # forget all we have seen until this position
(\d) # group 1, 1 digit
[a-z] # a letter
\w+ # 1 or more word character, you may use [a-z0-9]+
[a-z] # a letter
\1 # same digit as in group 1
或者是Perl的单行代码:
$perl -ane 'if(s/^\d*\K(\d)[a-z]\w+[a-z]\1/$&/){s/\d+//g;print "line: $.: $_"}' file.txt
line: 9: acoustical