我们说我有
this is a test string
this is a shest string
this est is another example of sest string
我想要最后一个字符串中的字符编号" t "在单词[tsh] EST中,我该如何获得它?(在bash中) EDIT2:如果我没错,我可以用[tsh] * \ test得到想要的子字符串。
我不能依赖第一场比赛(awk where = match(regex,$ 0))因为它给出了第一个角色位置,但是匹配的大小并不总是相同。
编辑:预期输出 - >
last t of [tsh]*est at char number: 14
last t of [tsh]*est at char number: 15
last t of [tsh]*est at char number: 35
希望我很清楚,我想我编辑了这个问题太多了抱歉!
答案 0 :(得分:3)
你错了什么
where=match(regex,$0)
匹配的语法错误。它的字符串后跟正则表达式。那是match($0, regex)
<强>校正强>
$ awk '{print match($0, "t[^t]*$")}' input
17
18
38
修改强>
获取最后一个&#34; t&#34;的字符串中的字符数。在单词[tsh] EST,
$ awk '{match($0, "(t|sh|s)est"); print RSTART+RLENGTH-1}' input
14
15
35
OR
更简单的版本
$ awk 'start=match($0, "(t|sh|s)est")-1{$0=start+RLENGTH}1' input
14
15
35
感谢Jidder的建议
编辑
使用正如OP提供的正则表达
$ awk '{for(i=NF; match($i, "(t|sh|s)*est") == 0 && i > 0; i--); print index($0,$i)+RLENGTH-1;}' input
14
15
35
答案 1 :(得分:1)
您可以使用与OP提供的相同正则表达式来使用此awk :
awk -v re='[tsh]*est' '{
i=0;
s=$0;
while (p=match(s, re)) {
p+=RLENGTH;
i+=p-1;
s=substr(s, p)
}
print i;
}' file
14
15
35
答案 2 :(得分:0)
尝试:
awk '{for (i=NF;i>=0;i--) { if(index ($i, "t") != 0) {print i; break}}}' myfile.txt
答案 3 :(得分:0)
这将打印包含t
awk '{s=0;for (i=1;i<=NF;i++) if ($i~/t/) s=i;print s}' file
5
5
8
awk '{s=w=0;for (i=1;i<=NF;i++) if ($i~/t/) {s=i;w=$i};print "last t found in word="w,"column="s}'
last t found in word=string column=5
last t found in word=string column=5
last t found in word=string column=8