需要一個函數來在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;
}
更好的想法:
我碰到這個 '醜陋' 的解決方案來?
是的,但爲什麼?當人們試圖逃避正則表達式元字符時,幾乎總是因爲他們真的**想用字符串而不是正則表達式做些事情,但不知道如何進行字符串操作,所以他們錯誤地試圖逃避所有的RE元字符,以便他們可以使用他們作爲正則表達式操作中的字符串(例如'match($ 0,regexp)'),而不是在字符串操作中使用它們(例如'index($ 0,string)')。 –
@EdMorton是的,**幾乎**總是,並不總是。這裏的目的是處理包含兩列這樣的文本文件:http://pastebin.com/U9Sjq53W - 所以,我寫了下面的awk腳本:http://pastebin.com/AwHmHS74來處理這樣的文件。我正在尋找在T.M.A-1迎接時錄製的字符串 - http://pastebin.com/sMDQxfcE - 在這種情況下,簡單的字符串操作無法解決問題。 – Lacobus