【发布时间】:2019-02-11 11:48:08
【问题描述】:
我正在尝试替换管道分隔和引号封装文件中的引号,而不替换提供封装的引号。
我尝试使用下面的 Perl 行将引号替换为反引号 `,但我不确定如何仅替换引号而不是整个组 1。
样本数据(test.txt):
"1"|"Text"|"a"\n
"2"|""Text in quotes""|"ab"\n
"3"|"Text "around" quotes"|"abc"\n
perl -pi.bak -e 's/(?<=\|")(.*)(?="\|)/\1`/' test.txt
这是正在发生的事情:
"1"|"`"|"a"\n
"2"|"`"|"ab"\n
"3"|"`"|"abc"\n
这是我想要实现的目标:
"1"|"Text"|"a"\n
"2"|"`Text in quotes`"|"ab"\n
"3"|"Text `around` quotes"|"abc"\n
【问题讨论】:
-
我很惊讶你不想要
"3"|"Text ""around"" quotes"|"abc"\n(3、Text "around" quotes和Text "around" quotes和abc的正确 CSV)而不是破坏你的文本。 -
您没有定义如何处理包含
`的文本 -
Grasshopper,一旦您回来,请告诉我们您希望如何在您的字段中表示 literal 反引号。简而言之,如果你有
"2"|""Text `in` quotes""|"ab",它应该是什么样子?in应该用双反引号括起来吗?还是用反斜杠转义?还是其他方式? -
@ikegami 我正在使用 SQL*Loader 将这些数据加载到数据库中,并且担心诸如“around”之类的文本会破坏负载。如果可行,这将是可取的。
-
@WiktorStribiżew 和 @ikegami 字段中的文字反引号应包含在 `` 双反引号中。