쉘 스크립트에서 일부 쉘 명령의 출력 중 특정 부분을 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