与えられた文字列で始まるすべてのシーケンス項目を次の記号項目に置き換えるには?

与えられた文字列で始まるすべてのシーケンス項目を次の記号項目に置き換えるには?

'string_string':次のカンマまでを含め、何千もの特定の文字列を含む巨大な1行のファイルを編集し、ファイルからこれらの,項目を削除したいと思います。

私はこれがsedorを使ってawk行うことができると思います。文字列/文字ストリームを操作するためのツールとして宣伝されますが、複数行ファイルにも適しています。

awkとコマンドの両方がやや不思議であり、毎日発生するさまざまな問題を解決しながら学びたいので、sed結果のコマンド自体について簡単に説明したいと思います。

最初のアプローチは、録画されたシーケンスを実行することvimでしたが、今は3時間実行していて、最後まで終わりませんでした。ある時点で問題が解決しても、より良い、より効率的な方法を知りたいです。 。

要求された例:

['string_string': <asdffds.1j2_3>, 'abd_dfA': 212, 'kajaj': <asdffdsa>, 'string_string': <fdjjdjd.asjsk2222>, 'jsjsjsj': 32.23], 
['string_string': <asdffds.1j2_3>, 'abd_dfA': 212, 'kajaj': <asdffdsa>, 'string_string': <fdjjdjd.asjsk2222>, 'jsjsjsj': 32.23]

結果:

[ 'abd_dfA': 212, 'kajaj': <asdffdsa>,  'jsjsjsj': 32.23], 
[ 'abd_dfA': 212, 'kajaj': <asdffdsa>,  'jsjsjsj': 32.23]

答え1

sedLINE_MAXより長い行(一部のシステムでは1024バイトまで)を処理できる場合は、次のことができます。

sed "s/'string_string':[^,]*,//g" < your-file

そうでない場合は、いつでも次のものを使用できますperl

perl -pe "s/'string_string':.*?,//g" < your-file

答え2

1つのアプローチは、文字列処理を使用してstring_stringとコンマ位置を順番に監視することです。各ペアで:

perl -plse '
  substr($_,$p-1,$q-$p+1,"")
           while
  ++($p=index($_,$s,$q-$p)) &&
  ++($q=index($_,",",$p));
' -- -s="'string_string':" file

関連情報