2つの境界の間に現れる特定の文字を削除する方法

2つの境界の間に現れる特定の文字を削除する方法

複数行のテキストを含むファイルがあります。"引用符文字をすべて削除する必要があります。しかし、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/; taa交換が成功するとタグに移動します。各反復で見つかった一重引用符を削除し"、他のすべての項目(キャプチャされた3つのグループ)を返します。

おすすめ記事