如何在shell中找到某些字符位置

时间:2017-05-12 21:25:58

标签: linux bash shell

对于给定的字符串:

a="This is test.txt file"

如何在shell环境中找到.的位置?它应该返回13

3 个答案:

答案 0 :(得分:4)

使用BASH:

a="This is test.txt file"
s="${a%%.*}"            # remove all text after DOT and store in variable s
echo "$(( ${#s} + 1 ))" # get string length of $s + 1

13

或使用awk

awk -F. '{print length($1)+1}' <<< "$a"
13

答案 1 :(得分:1)

使用C:

#include <stdio.h>
#include <string.h>

int main() {

    char a[] = "This is test.txt file";

    int i = 0;
    while( i < strlen(a) ) {
            if( a[i] == '.' ) {
                    printf("%d", i + 1);
                    break;
            }
            i++;
    }

    return 0;
}

答案 2 :(得分:1)

很显然,这是一个重复的问题,但是所有答案都不在两个页面上。

其他有用的信息可以在Position of a string within a string using Linux shell script?

上找到

此脚本将查找单个字符或多个字符的字符串。 我已经修改了另一页上的代码以适合这里的问题:

#strindex.sh
A="This is test.txt file"
B=.
strindex() {
X="${1%%$2*}"
[[ "$X" = "$1" ]] && echo -1 || echo "$[ ${#X} + 1 ]"
}
strindex "$A" "$B"
#end

这将按要求返回13。

在上面的示例中,我希望使用A =“ $(cat $ 1)”和B =“ $ 2”定义变量'A'和'B',以便可以在任何文件和任何搜索字符串上使用脚本从命令行。 注意,我还将另一页示例中的变量更改为大写。这不是强制性的,但有些人认为大写变量是一种很好的约定,并且更易于阅读和识别。