フィルタリングは可能ですか?つまり、内部引用符の前に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
ここでは、最初から始まる文字列と最後から行末までの"
文字列は次のとおりです。"
飛び越える残りは次のよう"
に置き換えられます。\"