使用sed搜索和替换管道分隔文件中的连续匹配项



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

类似于:

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

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

进行

sed的/||/|\\N|/g'

几乎可以,但不完全可以——在第一个数据行中,第二个管道被sed占用,因此第二个连续的空字段不会被解析!!!

我的破解方法是用管道传输第一个sed的结果,以进行另一次相同的搜索,并第二次替换以清除那些连续的空字段

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

TIA。

附加说明

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

h|i|j|k|

您需要通过管道连接到

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

来处理那些下线的案子。

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

我建议你在使用LOAD DATA INFILE时考虑到Mysql的所有警告——它们将帮助你抓住邪恶的案例。

您可以使用repeat(t)命令:

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

最新更新