"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 모드 설명:
's/pattern/replace_string/'
- 교체 모드. 찾아서pattern
교체하세요replace_string
\([0-9]*\.\)\{3,3\}
-\([0-9]*\.\)\
3번 반복되는 패턴 찾기(\{3,3\})
\([0-9]*\.\)\
0.
, 및 에 해당합니다 12.
.2345345345.
.