Bash索引第n个字符后的子字符串。
Bash索引第n个字符后的子字符串。
在Bash中,有没有一种方法可以获取第n个字符之后子字符串的indexOf,而不需要逐个剪切原始字符串,这样会很冗长。\n
12345678901234 $ expr index 'abcdeabcdabcaa' 'c' 3 $ expr index 'abcdeabcdabcaa' 'ca' 1
\n我想要的是:\n
$ indexOf 'abcdeabcdabcaa' 'ca' 12 $ indexOfAfter 5 'abcdeabcdabcaa' 'c' 8 $ indexOfAfter 5 'abcdeabcdabcaa' 'ca' 12 $ indexOfAfter 9 'abcdeabcdabcaa' 'b' 11 $ indexOfAfter 111 'abcdeabcdabcaa' 'c' 0
\n可能Bash已经有函数可以完成这个任务..这不是作业,只是出于好奇..
Bash中的"indexOf substring after nth character"问题出现的原因是需要在给定字符串中查找指定子字符串,并返回该子字符串出现的位置,但是要在第n个字符之后开始搜索。
解决这个问题的方法是使用awk命令来实现。在文件indexOf中,通过将两个字符串作为输入,并使用awk的index函数来查找第一个字符串中第二个字符串的位置。
具体代码如下:
echo "$1" "$2" | awk '{print index($1,$2)}'
例如,调用indexOf函数:
indexOf 'abcdeabcdabcaa' 'ca'
将会返回结果:
12
在文件indexOfAfter中,通过将三个字符串作为输入,使用awk的substr函数从第二个字符串中提取第一个字符串之后的子字符串,然后使用index函数在提取的子字符串中查找第三个字符串的位置。如果找到了,就返回第一个字符串中该子字符串的位置加上找到位置的偏移量减去1;如果没有找到,就返回0。
具体代码如下:
echo "$1" "$2" "$3" | \
awk '{s=substr($2,$1);posn=index(s,$3);if (posn>0) print $1+posn-1; else print 0;}'
这样,就可以实现在指定位置之后查找子字符串并返回其位置的功能。