より一般的な正規表現の使用

より一般的な正規表現の使用

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つしかない場合でも、しばしばこのフラグを追加します。必要に応じて追加してください。

関連情報