캐릭터의 위치를 ​​찾는 방법은 무엇입니까?

캐릭터의 위치를 ​​찾는 방법은 무엇입니까?

문자열에서 문자의 위치를 ​​확인해야 합니다.

예를 들어 문자열은 입니다 RAMSITALSKHMAN|1223333.

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

|주어진 문자열에서 위치를 찾는 방법은 무엇입니까 ?

답변1

-b단순 텍스트에 대해 동일한 위치에 있는 바이트 오프셋을 얻는 데 사용할 수 있습니다 (UTF-8 또는 유사한 텍스트에는 해당되지 않음).

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

위에서는 -a스위치를 사용하여 바이너리 파일에서 작업할 때 입력을 텍스트로 사용하고 -o일치하는 문자만 출력하도록 전환했습니다.

위치만 원하는 경우 grep을 사용하여 위치만 추출할 수 있습니다.

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

이상한 출력이 나타나면 grep을 확인하여 색상이 활성화되어 있는지 확인하십시오. --colors=nevergrep에 전달하거나 grep 명령 앞에 a를 추가하여 색상을 비활성화할 수 있습니다 \(이렇게 하면 별칭이 비활성화됩니다). 예를 들면 다음과 같습니다.

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

여러 일치 항목을 반환하는 문자열의 경우 파이프를 head -n1통해 첫 번째 일치 항목을 가져옵니다.

위의 두 가지를 모두 사용했으며 실행 파일(스크립트 또는 기타)을 통해 grep이 "별칭"된 경우 별칭을 사용할 때만 후자는 작동하지 않습니다.

답변2

당신이 사용하는 경우쉘에서는 외부 프로세스를 생성하지 않고 순수하게 내장된 작업을 사용할 수 있습니다.또는:

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

이것은매개변수 확장모든 문자열 항목을 모두 제거 |하고 임시 변수에 저장합니다. 그런 다음 임시 변수의 길이를 측정하여 색인을 얻으십시오 |.

원래 문자열의 존재 여부 를 확인 if하는 중입니다 . |그렇지 않은 경우 임시 변수는 원래 변수와 동일합니다.

또한 이는 |bash 문자열을 인덱싱할 때 종종 유용한 0 기반 인덱싱을 제공합니다. 그러나 1부터 시작하는 인덱스가 필요한 경우 다음을 수행할 수 있습니다.

$ 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" '|'`

관련 정보