मेरे पास नाम के साथ कुछ युगल फाइलें हैं
(a).1
(a).2
...
(a).100
चूंकि बहुत सारे प्रसंस्करण उपकरण वास्तव में पसंद नहीं करते हैं (
और )
फ़ाइल नाम में मैंने उन्हें एक अलग नाम पर नाम देना बेहतर समझा। मैं फ़ाइलों का नाम बदलने के लिए googled और अद्भुत उपकरण पाया rename
जहां मैं एक नियमित अभिव्यक्ति फ़ीड कर सकते हैं। ठीक है, आइए इसे आज़माएँ:
$ rename -v s/\(a\)/b/ \(a\).*
(a).1 renamed as (b).1
(a).2 renamed as (b).2
(a).3 renamed as (b).3
हम्म वो नहीं जिसकी मुझे उम्मीद थी। थोड़ी गुगली के बाद मैंने पाया कि \(
\)
एक ग्रुपिंग ऑपरेटर है । किस तरह की समझदारी है क्योंकि मैं (
)
कमांड में नहीं बचता ।
.
सभी प्रकार के मूल्यों से मेल खाने वाले चरित्र का उपयोग करके मैंने अपनी नाम बदलने की समस्या को हल किया :
rename -v s/.b./b/ \(b\).*
यह समाधान वास्तव में अच्छा नहीं है। तो मैं कैसे मिलान (
और )
बैश / लिनक्स / यूनिक्स रेगेक्स में?
LANG=en_US.UTF-8
पर्यावरण के साथ डेबियन 8.0 का उपयोग किया । हो सकता है कि साइबरविन इनपुट के साथ कुछ अजीब काम करता हो। मैं regex को उद्धरणों में डालकर इसे हल करने में सक्षम था rename -v 's/\(a\)/a/' \(b\).*
:।
rename [options] expression replacement file..
आपको अभिव्यक्ति और प्रतिस्थापन मिल गया है लेकिन फ़ाइल नहीं। विकल्पों के बाद लगता है (जैसे -v) वहाँ 3 अनिवार्य पैरामीटर हैं, जो रिक्त स्थान द्वारा अलग किए गए हैं। लेकिन आपके नाम बदलें आदेश में केवल 2 हैं। मैं अपना नाम बदला संस्करण (- अपरकेस V)$ rename -V<ENTER> rename from util-linux 2.24.2
rename [ -h|-m|-V ] [ -v ] [ -n ] [ -f ] [ -e|-E *perlexpr*]*|*perlexpr* [ *files* ]
। इसलिए हमारे पास दो अलग-अलग संस्करण हैं।