AWK Match&;拆分未找到字符串模式

AWK Match&;拆分未找到字符串模式,awk,Awk,传递以下命令时,我希望第一个命令将字符串(也是regex)拆分为两个数组元素,第二个命令(match)打印[[:blank:]] echo "new[[:blank:]]+File\(" | awk '{ split($0, a, "[[:blank:]]"); print a[1]}' 打印未拆分的整个字符串 echo "new[[:blank:]]+File\(" | awk '{ match($0, /[[:blank:]]/,

传递以下命令时,我希望第一个命令将字符串(也是regex)拆分为两个数组元素,第二个命令(match)打印[[:blank:]]

echo "new[[:blank:]]+File\(" | awk '{ split($0, a, "[[:blank:]]"); print a[1]}'
打印未拆分的整个字符串

echo "new[[:blank:]]+File\(" | awk '{ match($0, /[[:blank:]]/, m)}END{print m[0]}'
什么也不印

我错过了什么

更新

我使用以下命令调用awk脚本

awk -v regex1=new[[:blank:]]+File\( -f parameterisedRegexAwkScript.awk "$file" >> "output.txt"
len = split(regex1, regex, /[[:blank:]]/, seps
然后在我的脚本中,我尝试使用以下命令拆分字符串文字:

awk -v regex1=new[[:blank:]]+File\( -f parameterisedRegexAwkScript.awk "$file" >> "output.txt"
len = split(regex1, regex, /[[:blank:]]/, seps
但当我打印len时,它的值是1,而我原本以为它是2

echo "new[[:blank:]]+File\(" | awk '{ split($0, a, "[[:blank:]]"); print a[1]}'
第三个参数的作用类似于在
BEGIN
中设置
FS
,因此在本例中,您指示在任何空白处拆分,您需要转义
[
]
。让
file.txt
内容

new[[:blank:]]+File\(
然后

输出

new

(在gawk 4.2.1中测试)

感谢您的努力。您的字符串
echo“new[[:blank:][]+File\(“
未被视为regexp,它在echo中被视为文字字符串,您能否显示更清晰的输入和预期输出示例,以便我们更好地理解您的问题,谢谢(不是我的反对票).Hi@RavinderSingh13,谢谢你的回答。我已经用更详细的输入和输出更新了这个问题。希望这有帮助,谢谢第三个参数to split()是一个regexp,而不是一个字符串,所以使用regexp
/
而不是string
分隔符。你也不需要转义一个
]
,因为如果前面有一个开头
[
,那么它只是一个regexp元字符。你的
split()
调用应该是
split($0,a,/\[\[\[:blank:]]/)
而不是
split($0,a,“\[\\\\[\\\[:blank:\]\]\]\”)
。@EdMorton谢谢。我确实发现一个函数的值[2] 是“File”(”而不是“File\”。即使命令更新为传递regex1='new[[:blank:]]+File\\('我得到awk:warning:escape sequence
\('被视为普通的
)。但是当我尝试regex1=“new[[:blank:]+File\\\('或regex1='new[:blank:]+File\\\\\\\\('时,它会将[2]设置为'File\\\\\\'\\(“不客气。当然,这是一个不同的问题,所以如果你想得到帮助,请问一个新问题。@EdMorton-我希望现在这个问题更有意义