我希望在文件中搜索由 3 个字母后跟任意 3 或 4 个数字的列。例如。
if ( $1 ~ /^[A-Z][A-Z][A-Z][0-9][0-9][0-9]/)
Run Code Online (Sandbox Code Playgroud)
但是我需要 3 个字母作为变量,所以我正在寻找结果
SP="ABC"
if ( $1 ~ /^/SP/[0-9][0-9][0-9]/)>
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用。如何在搜索模式中组合变量和正则表达式?
SP="ABC"
if ( $1 ~ "^" SP "[0-9]{3}")
Run Code Online (Sandbox Code Playgroud)
您可以连接字符串而不是/xxx/
s,后者实际上更像是正则表达式匹配运算符,并且解析规则可能会令人困惑(并且在不同的实现之间有所不同)
$1 ~ /ABC/ /BCD/
Run Code Online (Sandbox Code Playgroud)
可以被视为$1
匹配的串联与/ABC/
(1 或 0 取决于是否$0
匹配/ABC/
) 和/BCD/
(1 或 0 取决于是否$0
匹配) 的串联/BCD/
,或$1
匹配/ABC/
(0 或 1) 与$0
匹配的串联,/BCD/
这将足够令人困惑,除了/regexp/
当与这里的连接运算符等其他运算符结合使用时,运算符不能很好地工作,因为可能与/
除法运算符混淆。
但是使用括号,您可以获得有趣的(阅读错误)行为:
$ echo 11 ab | gawk '{print $1 ~ /a/ (/b/)}'
1
$ echo 11 ab | bwk-awk '{print $1 ~ /a/ (/b/)}'
01
$ echo b | bwk-awk '{print /a/ - (/b/)}'
0-1
Run Code Online (Sandbox Code Playgroud)
(后一个是/a/
(0) 的结果与 的结果连接- (/b/)
)。
请注意,在 中$1 =~ "^" SP "[0-9]{3}"
,SP 的内容仍被视为正则表达式(如果是...
,则匹配 3 个字符,而不是 3 个点);如果这不是想要的:
if (index($1, SP) == 1 && substr($1, length(SP)+1) ~ /^[0-9]{3}/)
Run Code Online (Sandbox Code Playgroud)