एक खोल स्क्रिप्ट में स्ट्रिंग परिवर्तन करने का सबसे अच्छा तरीका क्या है?

वोट
3

मैं एक खोल स्क्रिप्ट में एक स्ट्रिंग के रूप में एक पथ है, पूर्ण या संबंधित हो सकता है:

/usr/userName/config.cfg

या

../config.cfg

मैं फ़ाइल नाम निकालना चाहते हैं (पिछले / के बाद वाले हिस्से, इसलिए इस मामले में: config.cfg)

मैं समझ यह करने के लिए सबसे अच्छा तरीका है कुछ सरल regex के साथ है? क्या ये सही है? चाहिए या मैं एसईडी का उपयोग करें या बजाय AWK चाहिए?

शैल-पटकथा के स्ट्रिंग परिवर्तन सुविधाओं खुद से बहुत आदिम लगता है, और बहुत गूढ़ दिखाई देते हैं।

किसी भी उदाहरण समाधान भी सराहना कर रहे हैं।

12/03/2009 को 15:52
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


4 जवाब

वोट
11

आप बैश उपयोग करने के साथ ठीक हो, तो आप पार्टी स्ट्रिंग विस्तार का उपयोग कर सकते हैं:

FILE="/path/to/file.example"
FILE_BASENAME="${FILE##*/}"

यह थोड़ा गुप्त है, लेकिन ब्रेसिज़ चर विस्तार शुरू, और डबल हैश स्ट्रिंग की शुरुआत से निर्दिष्ट ग्लोब पैटर्न के एक लालची हटाने करता है।

डबल %% एक स्ट्रिंग के अंत से एक ही बात करता है, और एक भी प्रतिशत या हैश एक गैर लालची हटाने करता है।

इसके अलावा, एक सरल निर्माण की जगह भी उपलब्ध है:

FILE=${FILE// /_}

उदाहरण के लिए अंडरस्कोर से सभी रिक्त स्थान की जगह लेंगे।

एक एकल स्लेश फिर, गैर लालची है।

12/03/2009 को 16:06
का स्रोत उपयोगकर्ता

वोट
6

स्ट्रिंग परिवर्तन करने के बजाय मैं बस का उपयोग करेंगे

file=`basename "$filename"`

संपादित करें :

इस के लिए कुछ नए वाक्य रचना (जो आपके फ़ाइल नाम $ फ़ाइल नाम में आयोजित किया जाता है मान लिया गया है) के लिए धन्यवाद थकान मिटाने के:

file=$(basename $filename)
12/03/2009 को 15:55
का स्रोत उपयोगकर्ता

वोट
1

मैं आम तौर पर एक सरल regex के साथ एसईडी उपयोग करते हैं, इस तरह:

echo "/usr/userName/config.cfg" | sed -e 's+^.*/++'

परिणाम:

>echo "/usr/userName/config.cfg" | sed -e 's+^.*/++'
config.cfg
12/03/2009 को 16:27
का स्रोत उपयोगकर्ता

वोट
1

अधिकांश वातावरण के लिए उपयोग किया है perlऔर मुझे लगता है कि ज्यादातर स्ट्रिंग हेरफेर के लिए के साथ अधिक सहज हूँ।

लेकिन के रूप में उल्लेख है, कुछ इस सरल से, आप उपयोग कर सकते हैं basename

12/03/2009 को 15:58
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more