सबसे पहले, मुझे यह कहना चाहिए कि ऐसा करने का सबसे आसान तरीका है कि आप प्रिनेम या नाम बदलें कमांड का उपयोग करें।
उबंटू पर, OSX (Homebrew पैकेज rename
, MacPorts पैकेज p5-file-rename
), या अन्य सिस्टम पर्ल नाम (नाम):
rename s/0000/000/ F0000*
या उपयोग-लिनेक्स-एनजी से नाम बदलने वाले सिस्टम पर, जैसे कि RHEL:
rename 0000 000 F0000*
समतुल्य सीड कमांड की तुलना में यह बहुत अधिक समझने योग्य है।
लेकिन जैसा कि sed कमांड को समझने के लिए, sed मैनपेज मददगार है। यदि आप मैन सेड चलाते हैं और & / (सर्च करने के लिए / कमांड का उपयोग करके) खोजते हैं, तो आप पाएंगे कि यह s / foo / bar / प्रतिस्थापन में एक विशेष चरित्र है।
s/regexp/replacement/
Attempt to match regexp against the pattern space. If success‐
ful, replace that portion matched with replacement. The
replacement may contain the special character & to refer to that
portion of the pattern space which matched, and the special
escapes \1 through \9 to refer to the corresponding matching
sub-expressions in the regexp.
इसलिए, \(.\)
पहले चरित्र से मेल खाता है, जिसे संदर्भित किया जा सकता है \1
। फिर .
अगले चरित्र से मेल खाता है, जो हमेशा 0. है। फिर \(.*\)
शेष फ़ाइल नाम से मेल खाता है, जिसे संदर्भित किया जा सकता है \2
।
प्रतिस्थापन स्ट्रिंग यह सब &
(मूल फ़ाइल नाम) का उपयोग करके एक साथ रखती है और \1\2
जो कि 2 अक्षर को छोड़कर फ़ाइल नाम का प्रत्येक भाग है, जो कि 0 था।
यह ऐसा करने के लिए एक सुंदर गूढ़ तरीका है, IMHO। यदि किसी कारण से नाम बदलने की आज्ञा उपलब्ध नहीं थी और आप नाम बदलने के लिए sed का उपयोग करना चाहते थे (या शायद आप नाम बदलने के लिए कुछ जटिल कर रहे थे?), तो आपके regex में अधिक स्पष्ट होने से यह अधिक पठनीय बन जाएगा। शायद कुछ इस तरह:
ls F00001-0708-*|sed 's/F0000\(.*\)/mv & F000\1/' | sh
यह देखने में सक्षम है कि वास्तव में एस / खोज / प्रतिस्थापन में क्या बदल रहा है / यह बहुत अधिक पठनीय बनाता है। यदि आप गलती से इसे दो बार या कुछ और चलाते हैं, तो यह आपके फ़ाइल नाम से बाहर चूसने वाले पात्रों को नहीं रखेगा।