स्ट्रिंग में डॉट की जगह, लेकिन पिछले एक को छोड़कर


1

बदलो "।" [डॉट्स], लेकिन पिछले एक को छोड़ दें: जैसे: .txt [स्ट्रिंग में डॉट्स की यादृच्छिक संख्या हो सकती है, यहां तक ​​कि शून्य, मुझे बस पिछले एक की आवश्यकता है]

$ echo 'someth.ing.something.txt' | सोमेगैजिक सोम
- इंग -कुछ।
$


1
सर्वरफॉल्ट पर क्रॉस-पोस्ट किया गया: serverfault.com/questions/223402/…
— बॉबी

जवाबों:


2

इसे आजमाइए:

echo 'someth.ing.something.txt' | sed 's/\(.*\)\.\([^.]*\)$/\1\n\2/;s/\./-/g;s/\n/./g'

मैं अंतिम डॉट के लिए अतिरिक्त "मार्कर" चरित्र को फेंकना पसंद करता हूं ताकि आप इसे ढीला न करें। मुझे उस ट्रिक को याद रखना पड़ेगा।
— jernernerny

1
#!/bin/bash

F=$1
tail=${F#*.}
head=${F%.*}
removed_dots=$(echo $head| tr "." "-")
mv -iv $1 "$removed_dots.$tail"

आप शायद tail=${F##*.}(दो #) चाहते हैं और आप कर सकते हैं removed_dots=${head//./-}(कोई ज़रूरत नहीं है tr)। आप headनए चर का उपयोग करने के बजाय चर का फिर से उपयोग कर सकते हैं ।
— डेनिस विलियमसन

@ डेनिस - इसे बेहतर बनाने के लिए आपका बहुत स्वागत है। मैंने उन सभी साफ-सुथरी चीजों को लटका नहीं पाया है जो आप ${ ... }अभी तक कर सकते हैं ।
— निफले


0

Im यकीन है कि एक बेहतर (रेगेक्स) तरीका है, लेकिन आप एक स्क्रिप्ट (अजगर / पर्ल) लिख सकते हैं जो स्टड से पढ़ता है और अंतिम डॉट पाता है, इसे फ़ाइल नाम + विस्तार में विभाजित करता है और फिर फ़ाइलनाम में सभी बिंदुओं को बदल देता है।

अंत में इसे संक्षिप्त करें और इसे फिर से थूक दें।


हाँ, साइरस के साथ जाना, =)
— १
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.