正規表現なしのsed

正規表現なしのsed

大きなファイル (最大 2GB) の検索と置換機能に GNU SED を使用しています。

検索と置換の文字には任意の文字を含めることができるため、検索と置換のパラメータをプレーンテキストとして扱うようにしたいと思います。

sed コマンドで、検索パラメータまたは置換パラメータを正規表現として扱いたくありません。

いろいろ実験してみましたが、毎回、プレーンテキストとして sed では機能しない新しい正規表現の組み合わせが出てきます。

これを実現するにはどうすればよいでしょうか?

特殊文字をエスケープする式はありますか?

注:~コマンド区切り文字として演算子を使用しています。/

以下は例です

sed -ne "s~^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$~Replace" -ne "w output.txt" "input.txt"

上記のコマンドは、検索パラメータを正規表現として扱うため機能しません(正規表現であるため)。したがって、テキストを検索するには、以下のように正規表現内のいくつかの特殊文字をエスケープする必要があります。

sed -ne "s~\^\[-+\]?\[0-9\]\*\\.?\[0-9\]+(\[eE\]\[-+\]?\[0-9\]+)?\$~Replace" -ne "w output.txt" "input.txt"

.*$別の例では、に変更する必要があります.\*\$ が、 では(.*$) 入力を変更したくありません。

では、エスケープシーケンスには普遍的なルールがあるのでしょうか?

答え1

質問:特殊文字をエスケープする式はありますか?
質問:エスケープシーケンスに普遍的なルールはありますか?

答え:/、、、、.などを入力するのが面倒な場合は、特殊文字に対応する 16 進コードを使用できます*。例:?$

sed -rn '/\x22/p' file

\x22は を表すので、二重引用符を含む行を出力します"

16 進コードを調べる必要がある場合は、次のコマンドを使用して、すべての 16 進コードをファイルに保存できます。

gawk 'BEGIN{for(i=0;i<255;i++){printf("%d\t%x\t%c\n", i,i,i)}}' null >chars.txt

関連情報