awk 正则表达式模式与行首不匹配
awk regex pattern does not match beginning of the line
我在 Windows 10,MinGW 安装上使用 GNU awk 版本 3.1.7。
要测试的文件具有此内容,但其他文件也有相同的行为。
test.txt
line one
second line
another line
end this one should match
double test
yet another
我只想打印以 e
开头的第一个单词。
我使用的 awk 命令是:
awk '{ if ( ~ /^e/) {print } }' test.txt
但是这会在任何地方打印每个第一个带有字符 e
的单词。
输出
line
second
another
end
double
yet
当我想匹配单词的结尾时工作正常。
匹配第一个以 d
.
结尾的单词
awk '{ if ( ~ /d$/) {print } }' test.txt
输出
second
end
知道为什么第一个匹配单词开头的示例不起作用吗?
我在那里做错了什么?
我刚刚在 Windows 10.
上用 gawk 3.1.6 - 1 试了一下
当我尝试使用单引号时出现语法错误:
awk '{ if ( ~ /^e/) {print } }' test.txt
// Error
awk: '{
awk: ^ invalid char ''' in expression
使用双引号可以正常工作,仅打印 end
.
awk "{ if ( ~ /^e/) {print } }" test.txt
所以我也在 gawk 3.1.7 上用双引号尝试了这一行。
有效。
仅打印 end
.
当我使用带单引号的行示例时,gawk 3.1.7 没有给出任何错误,但是由于某种原因,其中的 /^e/
正则表达式不匹配,因为它应该匹配。
所以至少从我的角度来看,如果您在 windows 上使用 gawk,请始终在命令行中对 awk 代码使用双引号。
这与 gawk 无关,它是 Windows 引用规则。 gawk 甚至看不到引号 - 它只是 运行s 在 Windows 传递给它的任何脚本上(即引号之间的部分)并且它完全是 Windows 解释引号以隔离然后传递给 gawk 的脚本。标准建议是通过将 awk 脚本放入文件中并将 运行ning 作为 awk -f script
而不是尝试处理 Windows 引用噩梦来避免此问题。最好的建议是在 Windows.
之上 运行 cygwin
awk "{ if ($1 ~ /^^e/) {print $1} }" test.txt
在 Windows 平台上:
1- 将 " 与 ' 交换,反之亦然
2- 对于 ^ 使用 ^^
我在 Windows 10,MinGW 安装上使用 GNU awk 版本 3.1.7。
要测试的文件具有此内容,但其他文件也有相同的行为。
test.txt
line one
second line
another line
end this one should match
double test
yet another
我只想打印以 e
开头的第一个单词。
我使用的 awk 命令是:
awk '{ if ( ~ /^e/) {print } }' test.txt
但是这会在任何地方打印每个第一个带有字符 e
的单词。
输出
line
second
another
end
double
yet
当我想匹配单词的结尾时工作正常。
匹配第一个以 d
.
awk '{ if ( ~ /d$/) {print } }' test.txt
输出
second
end
知道为什么第一个匹配单词开头的示例不起作用吗?
我在那里做错了什么?
我刚刚在 Windows 10.
上用 gawk 3.1.6 - 1 试了一下当我尝试使用单引号时出现语法错误:
awk '{ if ( ~ /^e/) {print } }' test.txt
// Error
awk: '{
awk: ^ invalid char ''' in expression
使用双引号可以正常工作,仅打印 end
.
awk "{ if ( ~ /^e/) {print } }" test.txt
所以我也在 gawk 3.1.7 上用双引号尝试了这一行。
有效。
仅打印 end
.
当我使用带单引号的行示例时,gawk 3.1.7 没有给出任何错误,但是由于某种原因,其中的 /^e/
正则表达式不匹配,因为它应该匹配。
所以至少从我的角度来看,如果您在 windows 上使用 gawk,请始终在命令行中对 awk 代码使用双引号。
这与 gawk 无关,它是 Windows 引用规则。 gawk 甚至看不到引号 - 它只是 运行s 在 Windows 传递给它的任何脚本上(即引号之间的部分)并且它完全是 Windows 解释引号以隔离然后传递给 gawk 的脚本。标准建议是通过将 awk 脚本放入文件中并将 运行ning 作为 awk -f script
而不是尝试处理 Windows 引用噩梦来避免此问题。最好的建议是在 Windows.
awk "{ if ($1 ~ /^^e/) {print $1} }" test.txt
在 Windows 平台上: 1- 将 " 与 ' 交换,反之亦然 2- 对于 ^ 使用 ^^