有没有办法在 Bash 中获取第 n 个字符之后的子字符串的 indexOf,而不需要一个一个地剪切原始字符串,那会很长
12345678901234
$ expr index 'abcdeabcdabcaa' 'c'
3
$ expr index 'abcdeabcdabcaa' 'ca'
1
我想要的是:
$ indexOf 'abcdeabcdabcaa' 'ca'
12
$ indexOfAfter 5 'abcdeabcdabcaa' 'c'
8
$ indexOfAfter 5 'abcdeabcdabcaa' 'ca'
12
$ indexOfAfter 9 'abcdeabcdabcaa' 'b'
11
$ indexOfAfter 111 'abcdeabcdabcaa' 'c'
0
Bash 上可能已经有功能可以做到这一点.. 这不是作业,只是出于好奇..
最佳答案
两个操作都用 awk
实现
文件 indexOf 的内容:
echo "$1" "$2" | awk '{print index($1,$2)}'
例如
indexOf 'abcdeabcdabcaa' 'ca'
12
文件 indexOfAfter 的内容:
echo "$1" "$2" "$3" | \
awk '{s=substr($2,$1);posn=index(s,$3);if (posn>0) print $1+posn-1; else print 0;}'
关于string - 第 n 个字符后的子字符串的 Bash 索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17694922/