如何找到角色的位置?

如何找到角色的位置?

我需要确定字符串中字符的位置。

例如,字符串是RAMSITALSKHMAN|1223333.

grep -n '[^a-zA-Z0-9\$\~\%\#\^]'

如何找到|给定字符串中的位置?

答案1

您可以使用-b来获取字节偏移量,该偏移量与简单文本的位置相同(但不适用于 UTF-8 或类似文本)。

$ echo "RAMSITALSKHMAN|1223333" | grep -aob '|'
14:|

在上面,我使用-a开关告诉 grep 将输入用作文本;操作二进制文件时必需的,并且-o切换为仅输出匹配的字符。

如果您只想要位置,可以使用 grep 只提取位置:

$ echo "RAMSITALSKHMAN|1223333" | grep -aob '|' | grep -oE '[0-9]+'
14

如果您得到奇怪的输出,请检查 grep 是否启用了颜色。您可以通过传递--colors=never给 grep 或在 grep 命令前添加 a 来禁用颜色\(这将禁用任何别名),例如:

$ echo "RAMSITALSKHMAN|1223333" | grep -aob '|' --color=never | \grep -oE '^[0-9]+'
14

对于返回多个匹配项的字符串,通过管道传递head -n1以获取第一个匹配项。

请注意,我在上面使用了两者,并请注意,如果 grep 通过可执行文件(脚本或其他)“别名”,则后者将不起作用,只有在使用别名时。

答案2

如果您正在使用shell,您可以使用纯粹的内置操作,而不需要生成外部进程,例如或者:

$ str="RAMSITALSKHMAN|1223333"
$ tmp="${str%%|*}"
$ if [ "$tmp" != "$str" ]; then
> echo ${#tmp}
> fi
14
$ 

这使用了一个参数扩展删除所有出现的|任何字符串并将其保存在临时变量中。然后只需测量临时变量的长度即可获得 的索引|

请注意,if正在检查|原始字符串中是否存在。如果没有,那么临时变量将与原始变量相同。

另请注意,这提供了从零开始的索引,|在索引 bash 字符串时通常很有用。但是,如果您需要基于一的索引,那么您可以这样做:

$ echo $((${#tmp}+1))
15
$ 

答案3

尝试:

printf '%s\n' 'RAMSITALSKHMAN|1223333.' | grep -o . | grep -n '|'

输出:

15:|

这将为您提供索引基于 1 的位置。

答案4

我们还可以使用“expr match”或“expr index”来做到这一点

expr 匹配 $string $substring,其中 $substring 是 RE。

echo `expr match "RAMSITALSKHMAN|1223333" '[A-Z]*.|'`

上面会给你位置,因为它返回匹配的子字符串的长度。

但更具体地说是搜索索引:

mystring="RAMSITALSKHMAN|122333"
echo `expr index "$mystring" '|'`

相关内容