我想在更大的jq程式中進行搜索和替換。問題是search可能包含被解釋為正則運算式功能的特殊字符,這是我不想要的。特殊字符應該像普通字符一樣對待。
所以我需要的是一個正則運算式格式轉義函式,類似于@uri,@html或@sh。如何在搜索字串中轉義所有在正則運算式(括號、.、?、*、 等)中有意義的特殊字符,以便它們不被解釋為正則運算式語法?
TEXT='Hello $ spaceman Spiff'
SEARCH='Hello $' # does not work, because '$' is interpreted as regex special character
REPLACE='Ola '
echo "$TEXT" | \
jq -rR --arg search "$SEARCH" --arg replace "$REPLACE" 'gsub($search; $replace; "g")'
在原始程式中,'search' 和 'replace' 在一個外部檔案中定義(這里通過引數傳遞)并且替換作為來自另一個外部源的文本資料的更大處理的一部分發生。
uj5u.com熱心網友回復:
這應該可以解決問題:
def deregex:
reduce ("\\\\", "\\*", "\\^", "\\?", "\\ ", "\\.", "\\!", "\\{", "\\}", "\\[", "\\]", "\\$", "\\|", "\\(", "\\)" ) as $c
(.; gsub( $c; $c));
例子:
"^.*$",
"/*",
"*/"
| [., deregex]
產生:
["^.*$","\\^\\.\\*\\$"]
["/*","/\\*"]
["*/","\\*/"]
uj5u.com熱心網友回復:
在沒有使用正則運算式的函式的情況下作業的限制可能比丟失任何正則運算式語法的風險更可取,例如split/1:
TEXT='Hello $ spaceman Spiff'
SEARCH='Hello $' # does not work, because '$' is interpreted as regex special character
REPLACE='Ola '
echo "$TEXT" | \
jq -rR --arg search "$SEARCH" --arg replace "$REPLACE" 'split($search)|join($replace)'
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/394286.html
上一篇:如何將json檔案從https網頁匯入到mariadb或mysql資料庫?
下一篇:以更有效的方式更新Json
