【发布时间】:2022-01-25 07:38:47
【问题描述】:
我有一些巨大的文件,它们的值由竖线 (|) 符号分隔。 我们引用的字符串,但有时在引用的字符串之间会有换行符。
我需要使用 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|.....
【问题讨论】:
-
您正在阅读一行。该模式无法匹配,因为您需要它匹配行尾之后的字符。使用
-0777告诉 Perl 将整个文件视为一行的简单解决方案。这对您来说可能是个问题(“大文件”)。 -
@WiktorStribiżew:我添加了一个示例
-
@ikegami:你能给我一个单行子句,然后将文件完整地处理吗?
-
可能是
perl -pi -e 's/(\r?\n)(?!\d{4,}\|)/ /g' test.txt(跳过后跟数字的) -
或
perl -0777 -pi -e 's/\R++(?!\d{4,}\|)/ /g' file