bash - 如何从 bash 中的文本文件中删除不间断空格?

标签 bash space

我有一个包含文本和数字的 csv 文件。

如果数字大于 1000,格式如下:1 000, 所以它有一个空格作为千​​位分隔符,但它不是空格。我尝试sed它,并且它在真实空间所在的地方起作用,但不是以这种格式。

它也不是TAB,我用“expand -t 1”删除了所有TAB。

以下一行演示了该问题:

x17_Provident_GDN_REMARKETING_provident.hu_listák;Display_Hálózat;Szeged;2021-03-09;Kedd;Mobil;HUF;1 736;9;130.83;0.00

倒数第二行第 8 列:1 736 是问题所在。

运行这个:grep -E -m 1 -e '[;]1[^;]+736[;]' <yourfile.csv | hexdump -C

给出:

00000000  78 31 37 5f 50 72 6f 76  69 64 65 6e 74 5f 47 44  |x17_Provident_GD|
00000010  4e 5f 52 45 4d 41 52 4b  45 54 49 4e 47 5f 70 72  |N_REMARKETING_pr|
00000020  6f 76 69 64 65 6e 74 2e  68 75 5f 6c 69 73 74 c3  |ovident.hu_list.|
00000030  a1 6b 3b 44 69 73 70 6c  61 79 5f 48 c3 a1 6c c3  |.k;Display_H..l.|
00000040  b3 7a 61 74 3b 53 7a 65  67 65 64 3b 32 30 32 31  |.zat;Szeged;2021|
00000050  2d 30 33 2d 30 39 3b 4b  65 64 64 3b 4d 6f 62 69  |-03-09;Kedd;Mobi|
00000060  6c 3b 48 55 46 3b 31 c2  a0 37 33 36 3b 39 3b 31  |l;HUF;1..736;9;1|
00000070  33 30 2e 38 33 3b 30 2e  30 30 0a                 |30.83;0.00.|
0000007b

最佳答案

这是一个 2 字节、UTF-8 编码的 non breaking space - c2 a0

您可以使用 perl 安全地删除它。

perl -pe 's/\xc2\xa0//g' dirty.csv > clean.csv

关于bash - 如何从 bash 中的文本文件中删除不间断空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67790774/

相关文章:

Bash 按位运算符

linux - Grep 文本的特定部分

bash 脚本 : started with $! 而不是#!并得到了神秘的行为。发生了什么?

c - 如何在不考虑空格的情况下运行 bash 命令

eclipse - 在 Eclipse 中自动生成的 Getter/Setter 之间留出空间

database - 无法回收 PostgreSQL 数据库上的空间

通过userdata在aws ec2实例上安装Mysql

linux - 将 stat 命令的输出与 shell 脚本中的整数变量进行比较

bison - 忽略 flex 和 bison 中的空白

html - 元素周围的额外空间不知道它来自哪里,它不是填充或边距