awk&x2013;如果我想在if/else逻辑中使用regexp,如何将其放入变量中?
当我应用此代码时:awk&x2013;如果我想在if/else逻辑中使用regexp,如何将其放入变量中?,regex,shell,unix,command-line,awk,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 gawk 'BEGIN {animals = /cat|dog/; digits = /[[:digit:]]+/ } { if ($0 ~ a
gawk '{ if ($0 ~ /cat|dog/) {
print "animal" }
else if ($0 ~ /[[:digit:]]+/) {
print "number" }
else { print "unknown" } }' path/to/input.txt > path/to/output.txt
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
对于此输入:
100
cat
200
something
dog
我看到了期望的输出:
number
animal
number
unknown
animal
很好。但当我使用此代码时:
gawk '{ if ($0 ~ /cat|dog/) {
print "animal" }
else if ($0 ~ /[[:digit:]]+/) {
print "number" }
else { print "unknown" } }' path/to/input.txt > path/to/output.txt
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
发生什么事了?真的很奇怪和不可预测 您需要像这样存储和重用正则表达式:
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
i、 e.在变量中存储时不要使用正则表达式分隔符。如果将
/
用作正则表达式分隔符,则在将其分配给变量时必须使用~
符号。