
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
正規表現にアスタリスクを追加しないでください。アスタリスクはゼロ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などの他のシェルでも機能しますが、上記の3つのシェルでのみテストしました。
ただし、「欲張りな」一致が必要な場合(つまり、2番目と後続の単語(存在する場合)の代わりに最後の単語を取得できるように、最短の文字列ではなく最長の一致文字列)を##
代わりに使用してください#
。