正規表現の演算子を含む文字列をawkスクリプトでエスケープする関数が必要です。awk:文字列から正規表現演算子をエスケープする関数
私はこの '醜い' ソリューションに出くわした:
function escape_string(str)
{
gsub(/\\/, "\\\\", str);
gsub(/\./, "\\.", str);
gsub(/\^/, "\\^", str);
gsub(/\$/, "\\$", str);
gsub(/\*/, "\\*", str);
gsub(/\+/, "\\+", str);
gsub(/\?/, "\\?", str);
gsub(/\(/, "\\(", str);
gsub(/\)/, "\\)", str);
gsub(/\[/, "\\[", str);
gsub(/\]/, "\\]", str);
gsub(/\{/, "\\{", str);
gsub(/\}/, "\\}", str);
gsub(/\|/, "\\|", str);
return str;
}
任意のより良いアイデアを?あなたはちょうどこのよう文字クラスを使用して単一のgsub
を使用することができます
はい、なぜですか?人々がregexpメタキャラクタをエスケープしようとすると、正規表現の代わりに文字列を使って何かをしたいのですが、文字列操作を行う方法がわからないため、すべてのREメタキャラクタをエスケープして使用できます。正規表現演算(例えば、 'match($ 0、regexp)')中の文字列として、それらを文字列演算(例えば 'index($ 0、string)')で使用する代わりに使用します。 –
@EdMortonはい、**ほぼ常に、常にそうとは限りません。ここでの目的は、このような2つのカラムを含むテキストファイルを処理することです:http://pastebin.com/U9Sjq53W - このようなファイルを処理するには、次のawkスクリプトを書きました:http://pastebin.com/AwHmHS74私は文字列 'T.M.A-1が挨拶されたときに記録する ' - http://pastebin.com/sMDQxfcEを探しています - この場合、単純な文字列操作では問題を解決できません。 – Lacobus