awk - 如果我想在if / else逻辑中使用它,如何将正则表达式放在变量中?

时间:2014-11-24 06:48:38

标签: regex shell unix command-line awk

当我应用此代码时:

gawk '{ if ($0 ~ /cat|dog/) {
print "animal" }
else if ($0 ~ /[[:digit:]]+/) {
print "number" }
else { print "unknown" } }' path/to/input.txt > path/to/output.txt

到这个输入:

100
cat
200
something
dog

我看到了所需的输出:

number
animal
number
unknown
animal

尼斯。但是当我使用这段代码时:

gawk 'BEGIN {animals = /cat|dog/; 
digits = /[[:digit:]]+/ }
{ if ($0 ~ animals) {
print "animal" }
else if ($0 ~ digits) {
print "number" }
else { print "unknown" } }' path/to/input.txt > path/to/output.txt

我看到了这个输出:

animal
unknown
animal
unknown
unknown

发生了什么事?真的很奇怪,不可预测!

1 个答案:

答案 0 :(得分:0)

你需要像这样存储和重用正则表达式:

gawk 'BEGIN {animals = "cat|dog"; digits = "[[:digit:]]+" }
{ if ($0 ~ animals) {
   print "animal" }
else if ($0 ~ digits) {
print "number" }
else { print "unknown" } }' path/to/input.txt > path/to/output.txt

即。在将其存储在变量中时,不要使用正则表达式分隔符。