10GBのデータを含むファイルがあり、sed -i 's/pattern/replace_pattern/g'
そのファイルに対して2048の代替式を実行しようとしています。
これをより迅速かつ効率的に実行する方法はありますか?
現在は順次起動またはsed
起動しています。perl
sed -i "s/VSS:F31128015/VSS_F31128015/g" file.data
sed -i "s/VSS:F31127969/VSS_F31127969/g" file.data
OR
perl -pi -e 's/VSS\:F31128015/VSS_F31128015/g' file.data
perl -pi -e 's/VSS\:F31127969/VSS_F31127969/g' file.data
実行速度に若干の違いがあることがわかりましたperl
。それともsed
もっと良い方法がありますか?ほぼ2048の代替式があります。
Tcl/tk
を使用して10GBファイルを見て開くのがregexp
良い考えですか?
私は使うべきですか?法律?
答え1
うまくいくべきこと(テストされていない)
より一般的な正規表現の使用
sed -i -e 's/(VSS):(F[0-9]+)/\1_\2/g' file.data
複数の式を使用しますが、1つのsed
呼び出しを使用してください。
sed -i -e "s/VSS:F31128015/VSS_F31128015/g" -e "s/VSS:F31127969/VSS_F31127969/g" file.data
答え2
Perlは、このような単純なテキスト置換に適しています。 ctrl-alt-delorの答えに対するあなたのコメントスレッドに続いて貪欲を避けるためのいくつかの方法があります。この場合、8桁の正確な一致をしたいですか?の場合、
perl -i.bak -pe 's/(?<=VSS):(?=F\d{8})/_/' bigfile
これは、ツアーを使用して下線に変更するコロンを検索します。
g
人々は、1行に一致が1つしかない場合でも、しばしばこのフラグを追加します。必要に応じて追加してください。