2016-08-29 2 views
-4

내 디렉토리의 파일을 반복하는 bash 스크립트를 작성하고 있습니다. 하나의 파일 이름에서 버전을 추출해야합니다.grep을 사용하여 파일 이름에서 bash의 버전을 추출하십시오.

지금까지

grep -Po '(?<=develop.)[^_]+' 

터미널에서 잘 작동

로, bash는 스크립트가 작동하지 않습니다.

echo $filename | grep -Po '(?<=develop.)[^_]+' # great 
version = $filename | grep -Po '(?<=develop.)[^_]+' # version: command not found 

파일 패턴 I 출력

모든 팁 3421-1 기대

software_1.2.1~develop.3421-1_.deb 

?

+5

작동하지 않습니까? – heemayl

+2

파일 이름의 형식은 무엇입니까? 출력에서 어떤 형식을 기대합니까? – Aaron

+0

질문에 예상되는 동작 : / – sjsam

답변

0

수정 필요 :

  • = 주위에 공백이 없습니다 (들) bash

  • 그래서 당신이 사용할 수 있도록 파이프를 사용 할 수 STDOUT에 변수의 콘텐츠를 쓰는 일부 공정에서 변수를 선언하면서 grep 님의 STDIN 예 여기 echo (또는 여기에 문자열 <<<)

  • 는 변수에 명령의 출력을 저장 사용하려면 명령 치환 $()

그래서는 수행

version=$(echo $filename | grep -Po '(?<=develop.)[^_]+') 

하지만이 경우 거의 모든 다른 경우에는 단어 분리와 파일 이름 확장을 방지하기 위해 변수 확장에 큰 따옴표를 사용합니다.