内部引用符をフィルタリングする方法は? [閉鎖]

内部引用符をフィルタリングする方法は? [閉鎖]

フィルタリングは可能ですか?つまり、内部引用符の前にESCを入れることは可能ですか?sedアッそれとも他の* NIXツール(perl / pythonを除く)?

はい(修正済み):

$ echo label=\"123 \"456\" 789\" \"AB C\" e f gh | magic-filter
label="123 \"456\" 789\" \"AB C" e f gh

tag="123\"456\"789""AB C"

つまり、最初と最後に基づいてフィルタリングするフィルタが必要です。charはそのまま渡されますが、他のすべての項目はに置き換えられます\続いて

ベストアンサー1

GNU sed、サポート特定の数のすべての項目を置き換える

$ echo label=\"123 \"456\" 789\" \"AB C\" e f gh | 
    sed -E 's/"/\\"/2g; s/\\("[^"]*)$/\1/'
label="123 \"456\" 789\" \"AB C" e f gh

すべて"(最初のものを除く")はに置き換えられ、最後から\"削除\されます。\"


GNU sed利用できない場合は、\最初の項目からも削除してください。\"

$ echo label=\"123 \"456\" 789\" \"AB C\" e f gh | 
    sed -E 's/"/\\"/g; s/\\"/"/; s/\\("[^"]*)$/\1/'
label="123 \"456\" 789\" \"AB C" e f gh

注:一部のバージョンでは代わりにsed必要な場合があります。-r-E


そしてperl

$ echo label=\"123 \"456\" 789\" \"AB C\" e f gh | 
    perl -pe 's/(^[^"]*"|"[^"]*$)(*SKIP)(*F)|"/\\"/g'
label="123 \"456\" 789\" \"AB C" e f gh

ここでは、最初から始まる文字列と最後から行末までの"文字列は次のとおりです。"飛び越える残りは次のよう"に置き換えられます。\"

おすすめ記事