2012-03-07 11 views
6

के अंत में पैटर्न से मिलान कैसे करें मैं बैश के लिए बहुत नया हूं। तो अगर यह एक बहुत ही बुनियादी सवाल है, तो कृपया मुझे माफ़ कर दो।लाइन/टेक्स्ट

मैं '.gz' के साथ फ़ाइल एक्सटेंशन '.gzip' को प्रतिस्थापित करने का प्रयास कर रहा हूं।

उदा .:

testfile.xml.gzip => testfile.xml.gz 

किसी एक स्क्रिप्ट जो ऐसा करता है लिखा है:

GZIP=`echo ${FILE} | grep .gz` 

    . 
    . 
    . 

FILE=`echo ${FILE} | sed 's/.gz//g'` 

पहली पंक्ति को गलत तरीके से testfile.xml.gzip फ़ाइल से मेल खाता है। grep .gz फ़ाइल नाम में टेक्स्ट से मेल खाता है जो बीच में है, जबकि मुझे फ़ाइल नाम के अंत में ही मिलान करने की आवश्यकता है। क्या कोई इस समस्या को ठीक करने के तरीके में मेरी सहायता कर सकता है? संक्षेप में, मुझे अभिव्यक्ति को जानने की ज़रूरत है जो रेखा/पाठ के अंत पैटर्न को मेल खाता है।

+0

POSIX BRE के ane ERE का आनंद लें :-) विंडोज नई-पंक्तियों n' के लिए '\ r \ ध्यान में जानें। –

उत्तर

13

उपयोग $ पंक्ति के अंत मैच के लिए:

FILE=`echo ${FILE} | sed 's/.gz$//g'` 

वैसे भी, क्या इस आदेश करता है फ़ाइल नाम है, जो नहीं है आप के अनुसार जो खोज रहे हैं से पीछे चल .gz एक्सटेंशन को निकालने के है आपके सवाल। ऐसा करने के लिए, dnsmkl का उत्तर sed के साथ जाने का तरीका है।

नोट इस प्रकार है कि जब से तुम पहले से ही एक वातावरण चर में FILE है आप बैश string manipulation उपयोग कर सकते हैं:

$ FILE=textfile.xml.gzip 
$ echo ${FILE/%gzip/zip} 
textfile.xml.zip 
+2

आपका मिलान पैटर्न, जबकि आमतौर पर काफी पर्याप्त है, 100% सही नहीं है क्योंकि यह 'foobargz' जैसे फ़ाइल नामों को 'fooba' में भी बदल देगा, आपको '' 'से पहले' '' जोड़ना होगा यदि आप इसे सचमुच चाहते हैं _dot_ से मेल करें, अन्यथा पैटर्न में किसी भी बिंदु किसी भी चरित्र से मेल खाएगा। वैकल्पिक रूप से यदि आपको डॉट्स की परवाह नहीं है तो शायद उन्हें पैटर्न से बाहर छोड़ना सबसे अच्छा होगा, क्योंकि, जैसा कि यह है, यह भ्रमित है। – Timo

6

स्ट्रिंग के अंत में "$" के अनुरूप है

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

echo 'gzip.gzip' | sed 's|gzip$|gz|g' 

आउटपुट

gzip.gz 
0

को .gzip फ़ाइलों की थोड़ी सी निर्देशिका करना चाहिए

(ls * .gzip | जबकि लाइन पढ़ें; एमवी "$ लाइन" "$ (बेसनाम" $ लाइन ".gzip) .gz"; किया)

0

This आप के लिए काम कर सकते हैं:

rename gzip gz *gzip