如何解决如何在awk中转义句点点字符?
我在 Windows 8.1 上使用 gawk(来自 GnuWin32)
如何转义句点(“.”)字符?
我尝试使用“\”。和“\x2e”,它不起作用
我的输入文件(z.txt)是这样的:
fox.doc
bear.jpg
abcjpg
我正在尝试使用此脚本 (z.awk) 查找 .jpg 文件:
{ printf $0; if (match($0,/\x2ejpe?g$/)) printf " - Jpeg image"; print "" }
我从批处理文件 (z.bat) 运行此脚本:
cat z.txt | gawk -f z.awk
我是否使用“\”并不重要。或“\x2e”或“.”,它仍然会匹配任何字符。我得到的输出是
fox.doc
bear.jpg - Jpeg image
abcjpg - Jpeg image
在输出中,最后一行应该是:
abcjpg
我已经在这里上传了脚本 - https://github.com/FrostShock/WinScripts/tree/main/ZZZ
解决方法
对于 GNU awk,如果您希望按字面解释转义序列,则必须使用兼容模式 (-c
):
$ man awk
...
In compatibility mode,the characters represented by octal and
hexadecimal escape sequences are treated literally when used in regular
expression constants. Thus,/a\52b/ is equivalent to /a\*b/.
但我很惊讶 \.
没有按预期工作。在你没有表现出来的东西中一定有其他的事情发生了。试试吧,也许:
awk '/\.jpe?g$/ {$(NF+1) = " - Jpeg image"} {print}'
演示:
$ printf '%s\n' "foo.doc" "bear.jpg" "abcjpg.txt" | \
awk '/\.jpe?g$/ {$(NF+1) = " - Jpeg image"} {print}'
abcjpg.txt
bear.jpg - Jpeg image
foo.doc
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。