gpt4 book ai didi

sed - 使用 sed 替换 NULL 列

转载 作者:行者123 更新时间:2023-12-01 11:40:59 47 4
gpt4 key购买 nike

我正在使用 hive 命令从 Hive 导出数据,它输出一个纯文本文件,字段以\t 结尾,行以\n 结尾。

假设有一些 NULL 列,也有一些值中的“NULL”字符,如下所示:

NULL    NULL    NULL
ABCD ABCDNULLABCD ABCD-NULL-ABCD

我使用 sed 命令将 NULL 替换为\N(用于加载到 MySQL 中):

hive -f query.sql | sed 's/\bNULL\b/NULL/g' >data.txt

结果是:

\N  \N  \N
ABCD ABCDNULLABCD ABCD-\N-ABCD

所以问题是,对于\b修饰符,'-'也匹配,'-'之间的NULL被替换。

有什么办法可以解决吗?

最佳答案

首先让我们创建一个示例以包含所有可能的极端情况:

$ cat >sample.txt
NULL NULL NULL
ABCD ABCDNULLABCD ABCD-NULL-ABCD
ABCDNULL x NULLABCD
^D

(空白处有制表符)

我认为为此目的使用先行和后行正则表达式是最干净的,例如使用 perl:

$ perl -pe 's/((?<=\t)|^)NULL($|(?=\t))/\\N/g' sample.txt
\N \N \N
ABCD ABCDNULLABCD ABCD-NULL-ABCD
ABCDNULL x NULLABCD

如果你真的喜欢sed,你可以使用@Birei的解决方案,它提供相同的输出。

关于sed - 使用 sed 替换 NULL 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20856279/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com