टेक्स्ट फ़ाइल बनाएं और इसे बैश का उपयोग करके भरें


81

मुझे एक टेक्स्ट फ़ाइल बनाने की ज़रूरत है (जब तक कि यह पहले से मौजूद नहीं है) और बैश का उपयोग करके फ़ाइल पर एक नई लाइन लिखें।

मुझे यकीन है कि यह सरल है, लेकिन क्या कोई मुझे यह समझा सकता है?

जवाबों:


41

यदि आप इसे एक स्क्रिप्ट के रूप में चाहते हैं, तो निम्नलिखित बैश स्क्रिप्ट को वही करना चाहिए जो आप चाहते हैं (प्लस आपको बताएं कि फ़ाइल पहले से मौजूद है):

#!/bin/bash
if [ -e $1 ]; then
  echo "File $1 already exists!"
else
  echo >> $1
fi

यदि आप "पहले से मौजूद" संदेश नहीं चाहते हैं, तो आप उपयोग कर सकते हैं:

#!/bin/bash
if [ ! -e $1 ]; then
  echo >> $1
fi

उपयोग करने के बारे में संपादित करें:

आपके द्वारा पसंद किए गए नाम के साथ जो भी संस्करण बचाएं, चलो "create_file" कहें (मेरा उद्धरण, आप उन्हें फ़ाइल नाम में नहीं चाहते हैं)। फिर, फ़ाइल को निष्पादन योग्य बनाने के लिए, कमांड प्रॉम्प्ट पर करें:

chmod u+x create_file

फ़ाइल को अपने पथ में निर्देशिका में रखें , फिर उसका उपयोग करें:

create_file NAME_OF_NEW_FILE

$ 1 एक विशेष शेल चर है जो प्रोग्राम के नाम के बाद कमांड लाइन पर पहला तर्क देता है; उपरोक्त उपयोग उदाहरण में NAME_OF_NEW_FILE $ 1 को ले जाएगा।


क्या मैं इसे "text.txt" से बदल सकता हूं?
११:११ बजे

1
@Switz: $ 1 समझाते हुए संपादन देखें। यदि आप स्क्रिप्ट में "text.txt" के साथ $ 1 को प्रतिस्थापित करते हैं, तो यह हमेशा फ़ाइल नाम के रूप में "text.txt" का उपयोग करेगा।
ग्रीनमैट

102

यूनिक्स में एक टेक्स्ट फाइल बनाना एक टेक्स्ट एडिटर (vim, emacs, gedit, आदि) के माध्यम से किया जा सकता है। लेकिन आप जो चाहते हैं वह कुछ इस तरह हो सकता है

echo "insert text here" > myfile.txt

यह 'myfile.txt' फ़ाइल में 'टेक्स्ट सम्मिलित करें' पाठ डाल देगा। यह सत्यापित करने के लिए कि यह कमांड 'कैट' का उपयोग करता है।

cat myfile.txt

यदि आप एक फ़ाइल का उपयोग करने के लिए संलग्न करना चाहते हैं

echo "append this text" >> myfile.txt

20

आपको लगता है कि UNIX शेल कमांड का मतलब है, बस चलाएं

echo >> file.txt

echoएक newline प्रिंट करता है, और >>शेल को उस न्यूलाइन को फ़ाइल में संलग्न करने के लिए कहता है, अगर यह पहले से मौजूद नहीं है।

हालांकि, प्रश्न का ठीक से उत्तर देने के लिए, मुझे यह जानना होगा कि यदि फाइल पहले से मौजूद है तो आप क्या करना चाहते हैं। यदि आप नई सामग्री के साथ इसकी वर्तमान सामग्री को बदलना चाहते हैं, उदाहरण के लिए, आप उपयोग करेंगे

echo > file.txt

EDIT: और जस्टिन की टिप्पणी के जवाब में, यदि आप नईलाइन जोड़ना चाहते हैं यदि फ़ाइल पहले से मौजूद नहीं है, तो आप दे सकते हैं

test -e file.txt || echo > file.txt

कम से कम जो बैश में काम करता है, मुझे यकीन नहीं है कि यह अन्य गोले में भी होता है।


+1। मुझे लगता है कि 1 अन्य संभावित व्याख्या है: यदि कोई फ़ाइल अभी तक मौजूद नहीं है, तो एक नई पंक्ति बनाएं और लिखें, अन्यथा फ़ाइल को बिल्कुल भी संशोधित न करें।
जस्टिन अर्दिनी

@ जस्टिन: अच्छी बात है, मुझे लगता है कि मैं इसे भी जोड़ सकता हूं और हमारे पास सभी विकल्प होंगे।
डेविड जेड

6
#!/bin/bash
file_location=/home/test/$1.json
if [ -e $policy ]; then
  echo "File $1.json already exists!"
else
  cat > $file_location <<EOF
{
      "contact": {
          "name": "xyz",
          "phonenumber":   "xxx-xxx-xxxx"
      }
    }
EOF
fi

यह कोड यह जांचता है कि उपयोगकर्ता की दी गई JSON फाइल टेस्ट होम डायरेक्टरी में मौजूद है या नहीं। यदि यह मौजूद नहीं है तो यह इसे सामग्री के साथ बनाएगा। आप अपनी आवश्यकताओं के अनुसार फ़ाइल स्थान और सामग्री को संशोधित कर सकते हैं।


2

आपका सवाल है थोड़ा अस्पष्ट है। यह एक शेल कमांड है जो मुझे लगता है कि आप क्या करना चाहते हैं:

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