簡體   English   中英

Ansible替換模塊正則表達式未檢測到正確的行

[英]Ansible replace module Regex not detecting proper lines

我試圖在文本文件上使用replace模塊來替換它找到的正則表達式匹配項的任何實例(不包括周圍的)。 我基本上只是在文本文件中搜索整個字符串或數字(3306)或(myhostname)。

不幸的是,我在這里定義的正則表達式無法正確檢測到字符串。 我在regextester上發現的示例似乎無法正常工作。

  tasks:
    - name: Rename the host database strings inside of each tenants settings.php file
      replace:
        dest: /var/www/html/someFile.txt 
        regexp: "/ec2-52-11-164-22.compute-1.amazonaws.com/g"
        replace: 127.0.0.1


    - name: Rename the port inside of each tenants settings.php file
      replace:
        dest: /var/www/html/someFile.txt 
        regexp: "/3306/g"
        replace: 4006

這是我正在搜索的文本-

Server1
        'host' => 'ec2-52-11-164-22.compute-1.amazonaws.com',
        'port' => '3306',
Server2
        'host' => 'ec2-34-112-123-53.compute-1.amazonaws.com',

選擇不帶s的兩個字符串的正確正則表達式是什么?

您正在嘗試將兩個不同的字符串匹配為一個字符串。 在正則表達式中,只有幾個字符具有特殊含義; 有關如何進行正則表達式的詳細指南, 這是我的最愛

無論如何,您要做的要點是用正則表達式引擎將用一組數字匹配的東西替換所有數字組,這意味着:

ec2(-\d+){4}

代替這個:

ec2-52-11-164-22

現在,該正則表達式的意思是“在字面上匹配字符ec2 ,然后匹配一個子模式四次。該子模式匹配一​​個文本-字符,后跟至少一位數字”。 我對Amazon AWS鏈接並不熟悉,但是對於不同主機之間發生變化的任何部分,只需將其替換為等效的通用正則表達式即可。 例如,如果開頭的ec2也可以是eb5ed78 ,則它將是e[az]\\d+ -字母e ,后跟az的ASCII碼之間的任何字符,后跟至少一個數字。

至於端口,它將只是\\d{1,4} -從1到4位數字。 除非您只想匹配該特定端口,否則請保留這種情況。

如果您看上去很努力,也許還可以找到為您預制的regex,但是我建議您嘗試自己構建它,並借助Regex101等工具進行實時測試,並通過上面鏈接的指南作為參考。 正則表達式是您的必備工具。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM