![쉘 스크립트에서 정보를 추출하는 정규식](https://linux55.com/image/62141/%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%EC%A0%95%EB%B3%B4%EB%A5%BC%20%EC%B6%94%EC%B6%9C%ED%95%98%EB%8A%94%20%EC%A0%95%EA%B7%9C%EC%8B%9D.png)
쉘 스크립트에서 일부 쉘 명령의 출력 중 특정 부분을 grep하고 싶습니다.
$ uname -r
>> 3.14.37-1-lts
난 그냥 장소가 필요 해요 3.14.37
.
값이 "-jwl35"인 쉘 스크립트 변수 의 경우 VERSION
"jwl35" 값만 사용하고 싶습니다.
쉘 스크립트에서 정규식을 사용하는 방법은 무엇입니까?
미리 감사드립니다!
답변1
아주 많은 방법이 있습니다. 다음은 일부입니다:
GNU 그렙
$ echo 3.14.37-1-lts | grep -oP '^[^-]*' 3.14.37
sed
$ echo 3.14.37-1-lts | sed 's/^\([^-]*\).*/\1/' 3.14.37
펄
$ 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
앗
$ echo 3.14.37-1-lts | awk -F- '{print $1}' 3.14.37
cut
$ echo 3.14.37-1-lts | cut -d- -f1 3.14.37
심지어 조개까지!
$ 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