문자열에서 부분 문자열 추출 [닫기]

문자열에서 부분 문자열 추출 [닫기]

"2.0.1" 및 "2.0.12" 문자 앞의 문자를 추출해야 합니다. 다음과 같은 문자열에서 sgdgfhfh-ZZZZZZ-ZZZ-2.0.1.ZZZ,sgdgfhfh-ZZZZZZ-ZZZ-2.0.12.ZZ :

노력하고있어:

#!/bin/bash
c=grep -o '[.0-9]*[0-9]' $1 
echo $c 

file $1은 포함된 텍스트 파일이며 ZZZZZZ-ZZZ-2.0.1.ZZZ오류가 발생합니다.

line 2: -o: command not found

답변1

@Archemar가 그의 의견에서 말했듯이 귀하의 명령은

c=grep -o '[.0-9]*[0-9]' $1

grep전혀 구현되지 않았습니다. 변수를 명령 출력으로 설정하는 구문은 다음과 같습니다.

c=$(grep -o '[.0-9]*[0-9]' $1)

$(command)이 명령의 출력으로 대체됩니다.

그런데 왜 이렇게 이상한 오류 메시지가 나타나는 걸까요? 명령을 실행하기 전에 변수 할당이 유효하기 때문입니다. 이는 변수가 이 명령에 대해서만 설정되었음을 의미합니다. 이는 변수를 영구적으로 설정하거나 변경하지 않으려는 경우 유용할 수 있습니다. 따라서 귀하의 행은 "변수가 c문자열로 설정되고 grep명령이 매개변수 와 함께 실행 -o되어야 하므로 명령이 검색되지만 찾을 수 없습니다"로 해석됩니다.'[.0-9]*[0-9]'$1-o

답변2

grep다음을 사용해 볼 수 없다면 sed:

sed 's/\([0-9]*\.\)\{3,3\}.*$//'

입력은 다음에서 제공됩니다. echo:

echo "sgdgfhfh-ZZZZZZ-ZZZ-2.0.12.ZZ" | sed 's/\([0-9]*\.\)\{3,3\}.*$//' 

Bash 스크립트에서:

먼저 파일을 만듭니다.

nano script.sh

스크립트에 다음 코드를 추가합니다.

#!/bin/bash

echo "$1" | sed 's/\([0-9]*\.\)\{3,3\}.*$//'

저장 및 종료. 실행 권한을 추가합니다.

chmod u+x script.sh

script.sh입력 매개변수로 실행( $1스크립트 내에서)

./script.sh "sgdgfhfh-ZZZZZZ-ZZZ-2.0.12.ZZ"

출력은 다음과 같습니다:

sgdgfhfh-ZZZZZZ-ZZZ-

sed 모드 설명:

  1. 's/pattern/replace_string/'- 교체 모드. 찾아서 pattern교체하세요replace_string

  2. \([0-9]*\.\)\{3,3\}- \([0-9]*\.\)\3번 반복되는 패턴 찾기(\{3,3\})

\([0-9]*\.\)\0., 및 에 해당합니다 12..2345345345..

관련 정보