Test
다음과 같은 변수가 있습니다
Test="Environment Dev"
col2
char 1을 다른 문자와 비교하고 env의 전체 이름을 인쇄하고 싶습니다 .
이게 내가 한 일이야
echo $Test|awk '{
if ($2 == "^D*")
print "DEV";
else
print "$2"
}'
출력을 얻었 지만 $2
테스트인 경우 원하는 출력 D
과 비교했습니다.T
TEST
나는 또한 이것을 시도했지만 출력은 변경시 변경되지 않았습니다 col2
.
echo $Test|awk '{
if ($2 ~ "^D*")
print "DEVELOPMENT"
else
print "$2"
}'
DEVELOPMENT
내가 실수하고 있는 부분을 도와주세요.
답변1
awk 스크립트에 몇 가지 오류가 있습니다.
~ /whatever/
정규식 의 경우 .^D
정규식에 별표를 추가 하지 마세요 . 별표는 0개D
문자와도 일치합니다.$2
그대로 인쇄되지 않으려면 주변 따옴표를 제거하십시오 .
가능한 해결책:
echo $Test | awk '{
if ($2 ~ /^D/)
print "DEV";
else
print $2
}'
답변2
bash
or 를 사용하는 경우 ksh
or 를 zsh
사용할 필요도 없으며 를 사용 하여 접두사를 제거 awk
할 수 있습니다 . 이 경우 접두사 "첫 번째 공백 앞의 모든 문자":${parameter#word}
$ Test="Environment Dev"
$ SecondWord=${Test#* }
$ echo $SecondWord
Dev
$ [[ $SecondWord =~ ^D ]] && echo DEV || echo $SecondWord
DEV
$ SecondWord=Foo
$ [[ $SecondWord =~ ^D ]] && echo DEV || echo $SecondWord
Foo
이것은 Bourne과 같은 다른 쉘에서도 작동할 수 있지만 위에서 언급한 세 가지 쉘에서만 테스트했습니다.
그런데 "탐욕스러운" 일치를 원하는 경우(즉, 두 번째 및 후속 단어(있는 경우) 대신 마지막 단어를 얻을 수 있도록 가장 짧은 문자열 대신 가장 긴 일치 문자열)를 ##
대신 사용하십시오 #
.