微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在awk中转义句点点字符?

如何解决如何在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 举报,一经查实,本站将立刻删除。