csv - 使用 sed 搜索并替换以竖线分隔的文件中的连续匹配项

标签 csv sed

我有一个管道分隔的数据文件,我想通过 LOAD DATA INFILE 将其加载到 Mysql 中。

类似于:

a|||d|e
x|y|z|0|1
...

我想用 \N 替换空字段,以便数据被识别为 NULL 值。

正在做

sed 's/||/|\\N|/g'

几乎可以工作,但不完全有效 - 在第一个数据行中,第二个管道被 sed 吃掉,因此第二个连续的空字段没有被解析!!!

我的黑客解决方法是将第一个 sed 的结果通过管道进行另一个相同的搜索,并第二次替换以消除那些连续的空字段。

我的问题是,在 sed 中解决这个问题的更优雅的方法是什么(最好一次性完成)?

TIA。

附加说明

如果您计划使用 sed 处理数据文件,还请注意像这样的行尾情况:

h|i|j|k|

您需要通过管道连接到

sed 's/|$/|\\N/g'

处理那些行尾情况。

此外,如果您要从 DOS 系统转到 UNIX 系统,您可能需要使用 sed 搜索和替换从数据文件中删除“\r”。

我建议您在使用 LOAD DATA INFILE 时考虑来自 Mysql 的所有警告 - 它们将帮助您捕获邪恶的情况。

最佳答案

您可以使用重复 (t) 命令:

echo 'a|||d|e' | sed ':repeat; s/||/|\N|/g; t repeat'

关于csv - 使用 sed 搜索并替换以竖线分隔的文件中的连续匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11507808/

相关文章:

linux - 如何从许多文件中删除包含特殊字符的字符串

python - 我怎样才能把这个字符串分开?

python - 错误的命名链接搜索和替换

bash - 查找前一行没有匹配数字的行

c++ - 提神气缓

regex - 从两个文件中的列中获取值

python pandas read_csv 在制表符分隔文件中无法识别\t

php - MySQL:使用临时表和 csv 匹配两个表中的相同字符串,并根据另一个字段匹配更改 1 个字段

python - 删除/重新排列/添加非常大的 tsv 文件 Python

python - KeyError 读取 csv 文件并传输到数组