问题描述: 使用其中一个数据字段中的管道解析csv文件(使用管道符号作为分隔符)。该数据字段将始终位于XML标记中,即(开始标记)和(结束标记)。因此,我希望用一些排除逻辑来解析csv文件,以便在标记中找到分隔符时忽略分隔符。
我的目标是使用Pentaho数据集成工具解析此数据更正的管道分隔文件(如下面的预期结果中所示),以加载到我们的数据库中。在数据更正之后,读取csv文件非常简单。
示例数据:
abc| <evar29> d|e|f</evar29> | ghijk
xxx| yyyy| <evar29>z|z</evar29>
预期结果(&#34; |&#34;在evar29标签内替换为&#34; @@&#34;)
abc| <evar29> d @@ e @@ f</evar29> | ghijk
xxx| yyyy| <evar29>z @@ z</evar29>
答案 0 :(得分:1)
对于您的情况:(?<=<evar29>.*)(?=.*</evar29>)\|
一般情况:(?<=<.+?>.*)(?=.*<.+?>)\|
答案 1 :(得分:0)
在阅读了有关sed和awk之后,在这里回答我自己的问题。但是,对于这些标记中多次出现管道字符,这似乎不太适用。我目前正在研究这个问题。感谢任何帮助。
命令:sed -n 's/<evar29>\(.*\)|\(.*\)<\/evar29>/<evar29>\1@@\2<\/evar29>/pg' test.txt
说明:替换evar29标记之间出现的管道符。
在evar29开始标记之后的字符串被分解并使用捕获组捕获,然后使用所需字符(在我的情况下为@@)连接。
替换字符并写入文件的命令如下:
sed -i 's/<evar29>\(.*\)|\(.*\)<\/evar29>/<evar29>\1@@\2<\/evar29>/g' test.txt
希望这有助于任何寻求此类解决方案的人。