小编nek*_*uuu的帖子

AWK with BOM:有什么很酷的方法可以用正则表达式处理 Unicode BOM?

我有两个文件以 UTF-8 编码,带/不带 BOM:

/tmp/bom$ ls
list.bom.txt  list.nobom.txt
/tmp/bom$ cat list.nobom.txt 
apple
banana
avocado
??
melon
/tmp/bom$ diff list.nobom.txt list.bom.txt 
1c1
< apple
---
> apple
/tmp/bom$ file list.nobom.txt list.bom.txt 
list.nobom.txt: UTF-8 Unicode text
list.bom.txt:   UTF-8 Unicode (with BOM) text
Run Code Online (Sandbox Code Playgroud)

两个文件之间的唯一区别是标题 BOM EF BB BF

然后,为了过滤以 'a' 开头的行,我使用插入符号编写了一个简短的 awk 脚本。

/tmp/bom$ gawk '/^a.*/' list.nobom.txt
apple
avocado
/tmp/bom$ gawk '/^a.*/' list.bom.txt
avocado
Run Code Online (Sandbox Code Playgroud)

不幸的是,对于标题 BOM,apple在第一行中被忽略了。

因此,我的问题是:有没有办法处理这个问题?

我考虑了三种解决方案:

  1. 直接写入 BOM 字节。例如,

    gawk 'BEGIN { pat = "^(\xef\xbb\xbf)?a.*" } $0 …
    Run Code Online (Sandbox Code Playgroud)

awk regular-expression unicode

7
推荐指数
1
解决办法
2331
查看次数

标签 统计

awk ×1

regular-expression ×1

unicode ×1