2012-03-15 17 views
7

के साथ फ़ाइल नाम तैयार करें मैं sed का उपयोग करके एक विशाल फ़ाइल में छवि नामों की सभी घटनाओं से पहले + (प्लस साइन) जोड़ना चाहता हूं।प्लस साइन

यह एक लाइन का एक उदाहरण है:

DAUSSI-H22-14K White Gold-Princess-1.00ct-G-SI1orH-VS2-EGL-mm-3.5,,H22,,7050,5720,3/5/2012 7:34,,,1,,henri-daussi-h22-diamond-halo-engagement-ring-14k-white-gold-width--mm-style-princess-1-00ct-g-si1-or-h-vs2-egl-size-3-5,henri-daussi-h22-diamond-halo-engagement-ring-14k-white-gold-width--mm-style-princess-1-00ct-g-si1-or-h-vs2-egl-size-3-5.html,Henri Daussi H22 Diamond Halo Engagement Ring-14K White Gold-Style:Princess-1.00ct-G-SI1 or H-VS2-EGL-Width: mm-Size:3.5,"Henri Daussi engagement ring with hand-matched side diamonds in a beautiful halo setting, totaling 1.40 carats. The image at left displays this ring with a 1.00 carat princess cut diamond. This setting can accommodate a variety of shapes and sizes. Please contact us on the range of possibilities of any ring.","Henri Daussi engagement ring with hand-matched side diamonds in a beautiful halo setting, totaling 1.40 carats. The image at left displays this ring with a 1.00 carat princess cut diamond. This setting can accommodate a variety of shapes and sizes. Please contact us on the range of possibilities of any ring.",,,,,14K White Gold,Princess-1.00ct-G-SI1 or H-VS2-EGL,,3.5,Metal_Style_Width_Size,simple,/H22.jpg,Shown with a 1.00 carat princess cut diamond.,/H_22.jpg,Shown with a 1.00 carat princess cut diamond.,/H22.jpg,Shown with a 1.00 carat princess cut diamond.,,,,,,Enabled,Taxable Goods,Not Visible Individually,0,0,No,Engagement Rings/Henri Daussi;;Designers/Henri Daussi,No,"ROUND, PEAR SHAPE, EMERALD CUT, MARQUISE, OVAL, RADIANT, PRINCESS CUT, HEART SHAPE, CUSHION CUT, ASSCHER CUT",.45-6.00 Carat,/H22.jpg 

इस लाइन के लिए, छवि /H22.jpg है और मैं +/H22.jpg को यह स्ट्रिंग परिवर्तन चाहते हैं।

जहाँ तक मैं कह सकता हूं, सभी छवियां / से शुरू होती हैं, लेकिन यह एक बड़ी फ़ाइल है, मैं पूरी तरह से सुनिश्चित नहीं हो सकता। एक बात मुझे यकीन है कि इससे पहले एक कॉमा है (यह अल्पविराम .csv फ़ाइल से अलग है)। इसलिए मुझे ,[any character except dot][dot](.jpg|.gif|.png),+[image_name].extension के साथ प्रतिस्थापित करने की आवश्यकता है।

यह सबसे अच्छा मैं अब तक क्या किया है है:

sed -ie 's/,\([a-zA-Z0-9/_]\+\)\(\.jpg|\.png|\.gif\)/,+\1\2/g' file.csv 

लेकिन यह काम नहीं कर रहा।

उत्तर

15

इस एक का प्रयास करें:

sed 's#\(,\)\([^.,]\+\.\(jpg\|png\|gif\)\)#\1+\2#g' infile 

स्पष्टीकरण:

s#...#...#g    # Substitute command. '#' is separator and 'g' is to apply it many times for 
         # each line. 
\(,\)     # Match a comma, and save it as '\1' 
[^.,]\+\.    # Match any characters until a '.' or ',' found. 
\(jpg\|png\|gif\)  # Match extension. 
\1+\2     # Replace with: Comma, plus sign and the image name. 
+0

मुझे लगता है कि बहुत-बहुत में \ 2 –

+0

मैं संपादित कर लिया मिलान मूल करने के लिए अल्पविराम जोड़ने के लिए 'से अल्पविराम बाहर करना चाहते हैं \ +' क्योंकि अन्यथा मुझे लगता है कि यह 'csv' फ़ाइल के कई फ़ील्ड को छोड़ देता है। इस तरह से खोज प्रत्येक में रीसेट हो जाएगी। – Birei

2
's/,\([a-zA-Z0-9\/_]\+\)\(\.jpg\|\.png\|\.gif\)/,+\1\2/g' 
  1. / है कि आप से बचने की जरूरत है मिलान करना चाहते हैं।
  2. | भागने की आवश्यकता है।

इतने सारे भागने से बच निकलते हैं।

1

यह आप के लिए काम कर सकते हैं: [। ^]

sed 's/\(^\|,\)\([^,.]*\.\(jpg\|png\|gif\)\)\>/\1+\2/g' file 
संबंधित मुद्दे