gpt4 book ai didi

regex - 替换大文件中带引号的字符串中的换行符

转载 作者:行者123 更新时间:2023-12-05 09:02:47 25 4
gpt4 key购买 nike

我有一些大文件,其中的值由竖线 (|) 符号分隔。我们引用的字符串,但有时在引用的字符串之间有一个换行符。

我需要使用 Oracle 的外部表读取这些文件,但在换行时他会给我错误。所以我需要用空格替换它们。

我对这些文件执行了一些其他的 perl 命令以解决其他错误,所以我想在一行 perl 命令中找到一个解决方案。

我在 stackoverflow 上发现了其他一些类似的问题,但它们的作用并不完全相同,而且我无法通过那里提到的解决方案找到解决我的问题的方法。

我试过但不起作用的声明:

perl -pi -e 's/"(^|)*\n(^|)*"/ /g' test.txt

示例文本:

4454|"test string"|20-05-1999|"test 2nd string"
4455|"test newline
in string"||"test another 2nd string"
4456|"another string"|19-03-2021|"here also a newline
"
4457|.....

应该变成:

4454|"test string"|20-05-1999|"test 2nd string"
4455|"test newline in string"||"test another 2nd string"
4456|"another string"|19-03-2021|"here also a newline "
4457|.....

最佳答案

听起来您想要像 Text::CSV_XS 这样的 CSV 解析器(通过操作系统的包管理器或最喜欢的 CPAN 客户端安装):

$ perl -MText::CSV_XS -e '
my $csv = Text::CSV_XS->new({sep => "|", binary => 1});
while (my $row = $csv->getline(*ARGV)) {
$csv->say(*STDOUT, [ map { tr/\n/ /r } @$row ])
}' test.txt
4454|"test string"|20-05-1999|"test 2nd string"
4455|"test newline in string"||"test another 2nd string"
4456|"another string"|19-03-2021|"here also a newline "

这个单行代码使用 | 作为字段分隔符而不是普通逗号来读取每条记录,并且对于每个字段,用空格替换换行符,然后打印出转换后的记录。

关于regex - 替换大文件中带引号的字符串中的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70844929/

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