簡體   English   中英

perl oneliner搜索替換模式

[英]perl oneliner search replace pattern

我有數千行,其中一些包含以下內容:

id_s,title_dk
KKS2826,"Søslag ved Øland og Gulland, 1564",12312,2x2
KKS935,"Vignet til Edvard Brandes, afhandling om Johan Wiehe", 1233, 4x4

我正在尋找一種Perl線性代碼,可以刪除引號(第二列)中可能出現的任何逗號。 但是顯然其他人不是,因為它們是分隔符。

因此,期望的輸出將是:

id_s,title_dk
KKS2826,"Søslag ved Øland og Gulland 1564",12312,2x2
KKS935,"Vignet til Edvard Brandes afhandling om Johan Wiehe", 1233, 4x4

我一直在玩這個游戲: perl -ne 's/(?<!,),//g; print;' perl -ne 's/(?<!,),//g; print;' 但是我不知道如何保留其他逗號。

易於使用Text :: CSV_XS

perl -CS -MText::CSV_XS=csv -we '
    my $aoa = csv(in => shift, allow_whitespace => 1);
    $_->[1] =~ s/,//g for @$aoa;
    csv(in => $aoa, out => *STDOUT, always_quote => 0);
    ' input.csv > output.csv

嘗試這個襯墊

perl -p -e  's/"([^"]*)"/my $m=$1;$m=~ s:,::g; $m /eg' file.txt

根據Borodin評論腳本的更新。 因為上面的腳本還將刪除"

perl -p -e  's/ (?<=") ([^"]*) (?<=")/$1=~ s:,::rg; /xeg' file.txt

在第二篇文章中,我使用正面的眼光看待后面。 帶有非破壞性修飾符(r) 非破壞性修改器僅在> 5.14上有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM