95 Latham Lane, Easton, PA 83755
在上面一行中,我想找到一行中最后一个字母的索引为' A'是字符串中的最后一个字母,我想在字符串中找到它的索引。
答案 0 :(得分:0)
var=$(sed -r 's/(^.*)([[:alpha:]])([[:blank:]][[:digit:]]+$)/\2/' <<< "95 Latham Lane, Easton, PA 83755")
awk -v let=$var '{ print index($0,toupper(let)) }' <<< "95 Latham Lane, Easton, PA 83755"
首先使用带有正则表达式的sed来提取第二个提取的分离的单个字母,并将其读入变量var。使用awk中的var来设置变量let使用索引函数来获得字符串中字母的索引。
答案 1 :(得分:0)
echo '95 Latham Lane, Easton, PA 83755' | grep -o '.*[a-zA-Z]' | tr -d '\n' | wc -c
说明:
echo '95 Latham Lane, Easton, PA 83755'
- 回应你的字符串
grep -o '.*[a-zA-Z]'
-
grep中的.*
将贪婪地匹配尽可能多的字符,[a-zA-Z]
将与最终字母匹配。 -o
标志将告诉grep仅打印匹配的字符。对于您的示例,这将是95 Latham Lane, Easton, PA
tr -d '\n'
- 从grep的结果中删除新行字符,以避免过多计数
wc -c
- 计算字符数。
答案 2 :(得分:0)
您可以尝试如下简单易行的方法,让我知道这是否对您有所帮助。
echo "95 Latham Lane, Easton, PA 83755" | awk '{match($0,/.*[a-zA-Z]/);print index($0,substr($0,RLENGTH,1))}'
OR
echo "95 Latham Lane, Easton, PA 83755" | awk '{match($0,/.*[a-zA-Z]/);print RLENGTH}'
答案 3 :(得分:0)
一种方式:
$ str="95 Latham Lane, Easton, PA 83755"
$ echo $str | fold -w 1 | awk '/[a-zA-Z]/{x=NR}END{print x}'
26
$
fold
将根据宽度包装线,在本例中为1,这意味着每个字符都将在一个新行中。使用awk
,我们搜索字符并将行号(NR
)分配给变量x
,并在末尾打印x
,其中应包含索引最后一个角色。
答案 4 :(得分:0)
$ echo '95 Latham Lane, Easton, PA 83755' | awk '{n=split($0,a,"");while(n--){ if(a[n]~/[A-Za-z]/){print a[n],n; break }}}'
A 26
更好的可读性
awk '{
n=split($0,a,"");
while(n--)
{
if(a[n]~/[A-Za-z]/)
{
print a[n],n; # a[n] gives alphabet, n gives index
break
}
}
}'
请注意,标准说如果没有指定结果 空字符串已分配给
中使用FS
。某些版本的awk
会产生。{1}} 输出,可能无法在OS X
或设置FS=
$ echo '95 Latham Lane, Easton, PA 83755' | awk -v FS= '{i=NF; while(i--)if($i~/[A-Za-z]/){print $i,i; break}}'
A 26
更好的可读性
awk -v FS= '{
i=NF;
while(i--)
if($i~/[A-Za-z]/)
{
print $i,i; break
}
}'
答案 5 :(得分:0)
$ echo '95 Latham Lane, Easton, PA 83755' |
awk '{print match($0,/[[:alpha:]][^[:alpha:]]*$/)}'
26