检查unix中一行中最后一个字母的最后一个索引

时间:2017-07-25 08:58:14

标签: bash unix awk

95 Latham Lane, Easton, PA 83755

在上面一行中,我想找到一行中最后一个字母的索引为' A'是字符串中的最后一个字母,我想在字符串中找到它的索引。

6 个答案:

答案 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