我有一个变量Test
如下
Test="Environment Dev"
我想将col2
char 1 与其他字符进行比较并打印 env 的全名
这就是我所做的
echo $Test|awk '{
if ($2 == "^D*")
print "DEV";
else
print "$2"
}'
我得到了$2
输出,但如果它是 Test ,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 的 shell,但我仅在上面提到的三个 shell 中进行了测试。
顺便说一句,如果您想要“贪婪”匹配(即最长的匹配字符串而不是最短的匹配字符串,以便您得到最后一个单词而不是第二个和后续单词(如果有的话)),请使用##
而不是#
.