쉘 스크립트에서 정보를 추출하는 정규식

쉘 스크립트에서 정보를 추출하는 정규식

쉘 스크립트에서 일부 쉘 명령의 출력 중 특정 부분을 grep하고 싶습니다.

$ uname -r
>> 3.14.37-1-lts

난 그냥 장소가 필요 해요 3.14.37.

값이 "-jwl35"인 쉘 스크립트 변수 의 경우 VERSION"jwl35" 값만 사용하고 싶습니다.

쉘 스크립트에서 정규식을 사용하는 방법은 무엇입니까?

미리 감사드립니다!

답변1

아주 많은 방법이 있습니다. 다음은 일부입니다:

  1. GNU 그렙

    $ echo 3.14.37-1-lts | grep -oP '^[^-]*'
    3.14.37
    
  2. sed

    $ echo 3.14.37-1-lts | sed 's/^\([^-]*\).*/\1/'
    3.14.37
    
  3. $ echo 3.14.37-1-lts | perl -lne '/^(.*?)-/ && print $1
    3.14.37
    

    또는

    $ echo 3.14.37-1-lts | perl -lpe 's/^(.*?)-.*/$1/'
    3.14.37
    

    또는

    $ echo 3.14.37-1-lts | perl -F- -lane 'print $F[0]'
    3.14.37
    
  4. $ echo 3.14.37-1-lts | awk -F- '{print $1}'
    3.14.37
    
  5. cut

    $ echo 3.14.37-1-lts | cut -d- -f1
    3.14.37
    
  6. 심지어 조개까지!

    $ echo 3.14.37-1-lts | while IFS=- read a b; do echo "$a"; done
    3.14.37
    

답변2

다루지 않는 방법Tedden의 포괄적인 답변배쉬의 것이에요매개변수 확장(추가 프로세스가 필요하지 않음):

vers=$(uname -r) && printf "%s\n" "${vers%%-*}"
3.14.37

vers="-jwl35" && printf "%s\n" "${vers#*-}"
jwl35

관련 정보