'string_string':
次のカンマまでを含め、何千もの特定の文字列を含む巨大な1行のファイルを編集し、ファイルからこれらの,
項目を削除したいと思います。
私はこれがsed
orを使って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
sed
LINE_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