我正在使用Perl从以下文本数据中提取数据(文本看起来像这样:),我需要通过换行过滤掉数据,但它不起作用

时间:2015-03-17 13:56:24

标签: regex perl

我正在使用Perl从以下文本数据中提取/重新格式化文本:

Bryggkaffe  6 st    27,67 kr    166,03 kr

Blandfärs
"Behöver ca 3 kg köttfärs. sv"  3 kg    66,69 kr    200,07 kr 

Banan EKO   6 kg    22,54 kr    135,23 kr

我想要

Blandfärs

"Behöver ca 3 kg köttfärs. sv"  3 kg    66,69 kr    200,07 kr

成为

Blandfärs 3 kg  66,69 kr    200,07 kr

两行之间有一些东西,但是用Perl捕获是不可能的,任何建议(已经使用/测试过了。\ f \ r \ n [x0A] [x0D])???

2 个答案:

答案 0 :(得分:0)

你可以尝试下面的Perl单线命令。

$ cat file
Bryggkaffe  6 st    27,67 kr    166,03 kr

Blandfärs
"Behöver ca 3 kg köttfärs. sv"  3 kg    66,69 kr    200,07 kr 

Banan EKO   6 kg    22,54 kr    135,23 kr
$ perl -0777pe 's/\n+"[^"]*"//g' file
Bryggkaffe  6 st    27,67 kr    166,03 kr

Blandfärs  3 kg    66,69 kr    200,07 kr 

Banan EKO   6 kg    22,54 kr    135,23 kr

perl -00pe 's/\n+"[^"]*"//g' file

答案 1 :(得分:0)

你可以使用简单的单行:

perl -p00e's/\R"[^"]*"//' file.txt

如果您希望“安全”删除引用的字符串,可以使用Text::Balanced标准模块生成正则表达式:

perl -MText::Balanced=gen_delimited_pat -p00e'BEGIN{$r=gen_delimited_pat(q{"})}s/\R$r//' file.txt

或插入gen_delimited_pat

的生成(和简化)输出
perl -p00e's/\R"[^\\"]*(?:\\.[^\\"]*)*"//' file.txt