कमांड लाइन का उपयोग करते हुए कुछ पंक्तियों को टिप्पणी / अनसुना करने का सबसे सरल तरीका


37

क्या कमांड लाइन का उपयोग करके शेल / कॉन्फिग / रूबी स्क्रिप्ट को कमेंट / अनफॉलो करने का कोई तरीका है?

उदाहरण के लिए:

$ comment 14-18 bla.conf
$ uncomment 14-18 bla.conf

यह जोड़ने या लाइन पर #साइन को हटाने के लिए होगा । आम तौर पर मैं उपयोग करता हूं , लेकिन मुझे उन पंक्तियों की सामग्री को जानना चाहिए और फिर खोज-प्रतिस्थापित ऑपरेशन करना होगा, और यह गलत परिणाम देगा जब एक से अधिक सुई हैं (और हम केवल एन-वें को बदलना चाहते हैं एक)।bla.conf1418sed


1
: इस क्यू शीर्षक के लिए एक एक नहीं है कोड के uncommenting कई पंक्तियों,, लाइन नंबर द्वारा निर्दिष्ट vi या vim का उपयोग कर जो शो ऐसा करने का उपयोग करने के कई तरीके sed, perlआदि terdon द्वारा विशेष रूप से एक,!
SLM

जवाबों:


46

Bla.conf के 4 के माध्यम से लाइनों 2 को टिप्पणी करने के लिए:

sed -i '2,4 s/^/#/' bla.conf

कमांड जिसे आप चाहते थे बनाने के लिए, बस ऊपर एक शेल स्क्रिप्ट में डालें जिसे टिप्पणी कहा जाता है:

#!/bin/sh
sed -i "$1"' s/^/#/' "$2"

इस स्क्रिप्ट का उपयोग आपके अपवाद के समान ही किया जाता है कि पहली और अंतिम पंक्तियों को डैश के बजाय अल्पविराम द्वारा अलग किया जाना है। उदाहरण के लिए:

comment 2,4 bla.conf

एक असंबद्धता कमांड को समान रूप से बनाया जा सकता है।

उन्नत सुविधा

sedरेखा का चयन काफी शक्तिशाली है। संख्या द्वारा पहली और अंतिम पंक्तियों को निर्दिष्ट करने के अलावा, उन्हें रेगेक्स द्वारा निर्दिष्ट करना भी संभव है। तो, आप से युक्त एक से सभी लाइनों को आदेश करना चाहते हैं foo, जिसमें एक के लिए bar, का उपयोग करें:

comment '/foo/,/bar/' bla.conf

बीएसडी (OSX) सिस्टम

BSD sed के साथ, -iविकल्प को एक तर्क की आवश्यकता होती है, भले ही वह सिर्फ एक खाली स्ट्रिंग हो। इस प्रकार, उदाहरण के लिए, ऊपर दिए गए शीर्ष कमांड को निम्न से बदलें:

sed -i '' '2,4 s/^/#/' bla.conf

और, स्क्रिप्ट के साथ कमांड को बदलें:

sed -i '' "$1"' s/^/#/' "$2"

1
क्या विकल्प के इरादे के 'बाद दोहरे हैं -i? उनकी जरूरत नहीं थी।
रफनेस


2

आप पूर्व मोड में विम का उपयोग कर सकते हैं:

ex -sc 'g/^\s*[^#]/s/^/#/' -cx bla.conf
ex -sc 'g/^\s*#/s/#//' -cx bla.conf
  1. g वैश्विक रेगेक्स

  2. s विकल्प

  3. x सहेजें और बंद करें


2

आप अपनी परियोजनाओं में पुन: उपयोग करने के लिए कार्यों के साथ एक bash_file बना सकते हैं

#!/bin/bash

# your target file
CONFIG=./config.txt

# comment target
comment() {
  sed -i '' "s/^$1/#$1/" $CONFIG
}

# comment target
uncomment() {
  echo $1
  sed -i '' "s/^#$1/$1/" $CONFIG
}


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