複数行のテキストを含むファイルがあります。"
引用符文字をすべて削除する必要があります。しかし、2つの境界の間にある場合にのみ削除したいと思います。
たとえば、サンプルラインは次のようになります。
"status":0,"text":"some stuff goes in here. and some more "here","user":"1234"
下の境界は"text":"
あり、上の境界はです。","user"
したがって、上記の行では"
1つだけ削除されます(「here」という単語の前)。
削除する方法の多くの例を見ました。すべて2つの国境の間にありますが、よりターゲットを絞ったものが見つかりませんでした。この質問を何度も受け取ったと思います(申し訳ありません)。答えが見つからないようですので、誰でも正しい方向を教えていただければ幸いです。
答え1
私達は一緒にsed
できます:
sed -E ':a s/("text":"[^"]*)"(.*)(","user")/\1\2\3/;ta' infile
- キャプチャされた最初のグループには、
"text":"
二重引用符を除くすべての文字が含まれます。[^"]*
- 一重引用符が最初に表示される場合
- 2番目のキャプチャグループには、上記の項目以降のすべての項目が含まれます。
(.*)
- 3番目に捕獲されたグループは
","user"
。 :a s/find/replace/; ta
a
交換が成功するとタグに移動します。各反復で見つかった一重引用符を削除し"
、他のすべての項目(キャプチャされた3つのグループ)を返します。