एक फ़ाइल में चक्र के लिए पुनरावृत्ति बैश स्क्रिप्ट


0

मैं इसे बहुत ही सरल बैश प्रोग्राम बनाने की कोशिश करता हूं जो निम्नलिखित संचालन करना चाहिए:

  1. एक फ़ाइल जावा एन बार संशोधित करें: हर बार मुझे फ़ाइल की एक पंक्ति में एक शब्द को बदलना होगा (लाइन 11 है) मुझे पता है कि निम्नलिखित कमांड है जो एक प्रोग्राम की एक विशेष पंक्ति में एक शब्द को प्रतिस्थापित करता है wih दूसरे :

    sed -i "11s/1/$n/" IC_masslessPlanetesimal.java
    

    यदि मैं उपरोक्त कमांड करता हूं तो मैं केवल एक बार फाइल को संशोधित कर सकता हूं। जावा क्योंकि चक्र के दूसरे पुनरावृत्ति में मेरे पास पहले पुनरावृत्ति के समान शब्द नहीं है: मैं 1 से पंक्ति 11 में शुरू करता हूं, जैसे कि मुट्ठी का पुनरावृत्ति मैं साथ बदलता हूं $n (यह 2 के बराबर है), लेकिन अब किस तरह मैं संशोधित कर सकता हूं sed शब्द को फिर से बदलने के लिए कमांड (जो अब 2 के बराबर है), उदाहरण के लिए, 11 वीं पंक्ति में 3?

  2. फ़ाइल जावा संकलित करें: यह ठीक है;

  3. एक फ़ाइल को संशोधित करें। फिर से: 1 में एक ही समस्या के रूप में) मैं एक पंक्ति में एक शब्द को एक चक्र के साथ या कुछ इस तरह से बदलना चाहता हूं;

  4. इसे एक निष्पादन योग्य फ़ाइल में पास करें: यह दूसरी समस्या है। मैंने param.txt फाइल को मोडिफाई किया है और अब मैं इसे एक्जीक्यूटेबल फाइल में पढ़ना चाहता हूं कार्यकारी । यदि मैं टर्मिनल से ऐसा करता हूं तो मुझे निष्पादन शुरू करना चाहिए आदेश के साथ कार्यक्रम ./exec और उसके बाद मुझे स्क्रीन से file.txt नाम लिखना होगा। अब क्या bash से प्रोग्राम लॉन्च करना संभव है और इसके साथ file.txt पढ़ना है? मैं इसके साथ प्रयास करता हूं:

    sed -i "13s/Zero/$n/" param.txt
    ./exec < param.txt   
    

उस स्क्रिप्ट को param.txt में शून्य 13 से $ n तक लाइन को बदलना होगा किस तरह मैं कमांड के साथ निष्पादन कार्यक्रम लॉन्च कर सकता हूं ./exec विशिष्ट param.txt फ़ाइल के साथ।

#!/bin/bash

n=0
for n in "2" "3" 
do
  sed -i "11s/1/$n/" IC_masslessPlanetesimal.java
  javac IC_masslessPlanetesimal.java  
  java IC_masslessPlanetesimal
 sed -i "13s/Zero/$n/" param.txt
 ./exec < param.txt   
done

बहुत बहुत धन्यवाद !!!


मौजूदा लोगों को पीटने के बजाय टेम्प्लेट फ़ाइलों से शुरुआत क्यों न करें?
Ignacio Vazquez-Abrams

2
इसके बजाय आप ARGUMENTS को स्वीकार करने के लिए सिर्फ अपने जावा प्रोग्राम को क्यों नहीं बदलते! तो आप इस हैक करने की जरूरत नहीं है! अपनी स्क्रिप्ट में, बस बाहर लिखें n एक फ़ाइल और अगली बार जब आप चलाते हैं, तो cat एक चर में फ़ाइल, मूल्य में 1 जोड़ें और इसे फ़ाइल में वापस लिखें। फिर एक तर्क में पास होने वाले जावा प्रोग्राम को चलाएं।
Peon

आप जो कर रहे हैं (हालांकि ज़रूरत से ज़्यादा जटिल) ठीक काम करना चाहिए। आपके पास वास्तविक समस्या क्या है?
terdon

जवाबों:


0
  1. फ़ाइल को जगह में संपादित करने के बजाय:

    sed -i "11s/1/$n/" IC_masslessPlanetesimal.java
    

    इसे एक टेम्प्लेट फ़ाइल में कॉपी करें, IC_masslessPlanetesimal.java.template कहें, फिर प्रत्येक n के लिए इसका एक नया संस्करण बनाएं:

    sed "11s/1/$n/" < IC_masslessPlanetesimal.java.template > IC_masslessPlanetesimal.java
    
  2. 1 के समान

  3. हाँ, ./exec < param.txt सही है। वह काम नहीं करता है?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.