這可能是顯而易見的事情,但我不得不問,因為我沒有看到它。
我正在嘗試在此文本檔案中進行以下替換。我要這個:
bind_password = 'grafana'
變成這樣:
bind_password = ''
我嘗試在包含該行的檔案上使用以下正則運算式單行:
$ perl -0pe 's/(bind_password = \')grafana\'/$1\'/g' file.txt
bash: syntax error near unexpected token `)'
當我在 regex101 上嘗試正則運算式時,它運行良好:https ://regex101.com/r/0fb4Pu/1 。不同之處在于我不得不轉義單引號。我試過在正則運算式周圍使用雙引號而不是單引號,如下所示:
perl -0pe "s/(bind_password = ')grafana'/$1'/g" file.txt
但是雖然這不會回傳錯誤,但它不會做我想要的。相反,它用一個冒號替換字串,如下所示:
'
我在這里做錯了什么?
uj5u.com熱心網友回復:
您可以使用
perl -i -pe "s/bind_password = '\Kgrafana(?=')//" file.txt
詳情:
-i- 修改檔案內容bind_password = '\K- 匹配bind_password = '并從匹配值中洗掉此文本(使其在檔案中保持完整)grafana- 你的grafana話(?=')- 后跟'(但'不會被消耗,所以它完整地保留在檔案中)
筆記:
- 您不需要
0in-0pe因為您的匹配不跨越多行 - 轉義單引號不是這樣作業的,在運算式周圍使用雙引號更簡單,盡管有時連接是唯一的方法
- 您不需要
g標志,因為它perl逐行作業,并處理所有行(g當每行有多個匹配項時是必需的)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/331270.html
