sed

2011-06-15 10 views
18

का उपयोग कर टैब को प्रतिस्थापित/बदलने के साथ मुझे एक टैब के साथ एक स्लैश वर्ण को प्रतिस्थापित करने की आवश्यकता है ताकि मैं awk का उपयोग कर एक निर्देशिका नाम निकाल सकूं।sed

/path/to/some/USEFUL_INFORMATION/in/some/path 

मैंने ऐसा करने की कोशिश की, लेकिन यह सब मेरे आउटपुट से "टी" डाला गया है।

sed -e 's/\//\t/g' filename 

किसी भी मदद की सराहना की जाएगी।

+0

ऐसा लगता है कि यह 'sed' के संस्करण पर निर्भर करता है। 'Tr'/'' \ t ' Beta

+0

आपको 'TAB 'के साथ'/'को प्रतिस्थापित करने की आवश्यकता नहीं है और इसे' awk' पर फ़ीड करें। 'awk' बस इसे अपने आप कर सकते हैं। – ssapkota

+1

इसके बारे में सोचने के लिए आओ, 'कट-एफ 5-डी'/' Beta

उत्तर

0

उपयोग + डिलीमीटर के रूप में sed -e 's+/+\t+g '

echo 'path/to/something' | sed -e 's+/+\t+g' 

// path  to  something 

संपादित करें: एक फ़ाइल का रास्ता निकालने के लिए एक सरल तरीका:

dirname /path/to/file.txt 
#output /path/to 
+0

आपने त्रुटि को पुन: उत्पन्न नहीं किया, है ना? – Beta

+0

@ बीटा आप सही हैं, यह मेरे लिए दोनों पर काम करता है –

13

प्रयास करें awk:

awk '{gsub("/","\t",$0); print;}' filename 
+0

यह पूरी तरह से काम करता है। धन्यवाद! –

+1

@ लांस, अगर यह काम करता है, तो जवाब स्वीकार करना न भूलें। – ssapkota

+0

यह एकमात्र उत्तर है जो ओएस एक्स –

0

dirname पर एक नज़र और basename

$ dirname /path/to/some/USEFUL_INFORMATION/in/some/path 
/path/to/some/USEFUL_INFORMATION/in/some 

$ basename /path/to/some/USEFUL_INFORMATION/in/some/path 
path 

awk है, उदाहरण के लिए किसी भी विभाजक संभाल कर सकते हैं /:

$ echo /path/to/some/USEFUL_INFORMATION/in/some/path | awk -F"/" '{print $5}' 
USEFUL_INFORMATION 
29

सबसे पहले, आप s/// परिसीमक के रूप में एक और चरित्र का उपयोग कर सकते हैं। आदेश

sed 's:ABC:DEF:g' 

यह अपने आदेश अधिक पठनीय कर देगा क्योंकि आप स्लैश से बचने के लिए नहीं के लिए

sed 's/ABC/DEF/g' 

बराबर है।

ने कहा कि, कुछ sड्स \t जैसे भागने वाले चरित्र का समर्थन नहीं करते हैं। मैक ओएस एक्स में यह मेरे लिए बहुत कुछ होता है, उदाहरण के लिए।

sed 's:/:<Control+V><TAB character>:g' 

मेरी मशीन में परिणाम है:: मेरा समाधान नियंत्रण + V और फिर टैब चार प्रेस करने के लिए है

$ pwd 
/Users/brandizzi/sandbox/demo/mydemo 
$ pwd | sed 's:/:  :g' 
    Users brandizzi sandbox demo mydemo 

हालांकि, आपका इरादा awk चर के सभी मार्ग निर्देशिका डाल करने के लिए है अगर $1 , $2 आदि बस स्लेश घोषित awk -F ध्वज के साथ क्षेत्र विभाजक होने के लिए:

$ pwd 
/Users/brandizzi/sandbox/demo/mydemo 
$ pwd | awk -F/'{print $3 " " $5}' 
brandizzi demo 
+2

पर मेरे लिए काम करता है: <टैब चरित्र> मैक के लिए टिप। – Jesse

+0

डिट्टो। मुझे इसकी ही खोज थी। – DGrady

+1

यह मैक ओएस एक्स – MichK

1

awk -F '/' 'your_file

{$ 5 प्रिंट}' यह प्रिंट USEFUL_INFORMATION

यह क्षेत्र विभाजक को परिभाषित करता है/किया जाना है। ध्यान दें कि चूंकि आपके तार एक/पहले क्षेत्र से शुरू होते हैं, इसलिए शून्य फ़ील्ड की गणना आपके विचार से कहीं अधिक होगी।

5

मुझे जवाब मिला, मेरे लिए, here।मेरे पास मैकॉक्स है इसलिए मैंने कंट्रोल + वी का इस्तेमाल कंट्रोल + i के बाद किया था।

sed -e 's/\/[CTR+V][CTR+I]/g' filename 
0

जैसा कि अन्य लोगों ने सुझाव दिया था, एक अन्य चरित्र को एक डिलीमीटर के रूप में उपयोग करें। दूसरा, उद्धरण के के बाहर $'\t'का उपयोग करें। ; परिसीमक के रूप में साथ उदाहरण:

$ echo "/path/to/some/USEFUL_INFORMATION/in/some/path" | sed -e 's;/;'$'\t'';g' 
path to some USEFUL_INFORMATION in some path 
+0

पर '^ वी^आई' दबाए रखने के लिए भी काम करता है * एनईक्स मंच पर यह किस संस्करण का चल रहा है? –

1

कोशिश एकल उद्धरण ('') के रूप में निम्न आदेश में दिखाया गया के बजाय दोहरे उद्धरण डाल करने के लिए ("") के आसपास।

sed -i "s/\//\\t/g" filename

आम तौर पर हम दोहरे उद्धरण चिह्नों का उपयोग ("") साथ sed जब हम विशेष वर्ण के साथ काम कर रहे हैं।

आपके मामले में आप टैब वर्ण (\ t) में \ से बच नहीं पाए हैं।

2

टैब sed का उपयोग साथ प्रतिस्थापित करने के लिए /:

sed 's/\//\'$'\t/g' filename.txt 

आम तौर पर, जगह \ '$' टैब (\ t) और न्यू लाइन से पहले (\ N) वर्ण। बाश में काम करता है।

निर्देशिका का नाम निकालने के लिए:

व्यक्तिगत रूप से, मैं grok12 के जवाब का उपयोग करेंगे।

awk -F'/' '{print $5}' filename.txt