大きなファイル (最大 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