मैं वास्तव में ansible के लिए नौसिखिया हूँ। क्या कोई मुझे मेरे मूल सिस्टम आईपी के साथ regexp का उपयोग करके फ़ाइल में आईपी पता बदलने में मदद कर सकता है। मान लें कि मैं "Djgroups.bind_address=<*/WHATEVER/BLANK>" को "Djgroups.bind_address=10.0.0.45" से बदलना चाहता हूं।

यह टॉमकैट उदाहरण के लिए होगा। वह रेखा जहां प्रतिस्थापन की आवश्यकता है:

JAVA_OPTS="-Xms6144m -Xmx6144m -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Djgroups.bind_address="

मैंने नीचे के रूप में उत्तरदायी लिखा:

  - name: Verifying Instance IP Address
    shell: grep Djgroups.bind_address /apache-tomcat-8.5.15_1/bin/catalina.sh|grep -v ^#|tr -s '=' '"'|cut -d '"' -f5
    register: tomcat_instance_ip
  - debug: msg='Tomcat instance has {{ tomcat_instance_ip.stdout }} set.'

  - name: Updating Tomcat Instance with valid local IP address
    replace:
      dest: /apache-tomcat-8.5.15_1/bin/catalina.sh
      regexp: '^(Djgroups.bind_address(?!.*\b{{ tomcat_instance_ip.stdout }}\b).*)$'
      replace: '\1 {{ ip_address }}'
    when: tomcat_instance_ip.stdout != ip_address

धन्यवाद, सामु

0
Rio 12 जुलाई 2017, 12:24

1 उत्तर

मैं regexp के साथ कम से कम 4 मुद्दों को देखता हूं:

  1. आपका . बच नहीं पाया है, इसलिए इसे एक विशेष वर्ण के रूप में व्याख्यायित किया जाता है।
  2. आप शुरुआत में ^ क्यों लगाते हैं। ऐसा लगता है कि आप एक स्ट्रिंग के बीच में कुछ खोजने की कोशिश कर रहे हैं, शुरुआत में नहीं।
  3. आपको नकारात्मक लुकअप में .* के लिए आलसी मूल्यांकन का उपयोग करना चाहिए। अभी यह कुछ भी मेल खाएगा।
  4. आप स्ट्रिंग के Djgroups.bind_address भाग से मिलान करने का प्रयास कर रहे हैं, जबकि मेरा मानना ​​​​है कि आप इसके बजाय जो कुछ भी आता है उससे मेल खाना चाहते हैं।

कोशिश करें: Djgroups\.bind_address=(?!.*?{{ tomcat_instance_ip.stdout }}.*?)(.*)$

और कृपया पहले अपने रेगेक्स का परीक्षण करें। https://regex101.com/ सुनिश्चित करें कि यह वास्तव में आपके इनपुट से मेल खाता है जैसा आपने सोचा था।

0
K. Kirsz 12 जुलाई 2017, 13:47