2012-05-07 11 views
7

मैं इसे बहुत गुगल रहा हूं। मैं केवल यह चाहता हूं कि यह लाइन:बैश: मैं ओएसएक्स बैश में नई लाइन द्वारा स्ट्रिंग को कैसे बदल सकता हूं?

echo "Replace <newLine> it by <newLine> NEWLINE <newLine> in my OSX terminal <newLine> and bash script" | sed -e 's/<newLine>/\n/g' 

मेरे ओएसएक्स टर्मिनल में और मेरी बैश स्क्रिप्ट में काम करता है। मैं इसके लिए sed का उपयोग नहीं कर सकता? क्या कोई और लाइन समाधान है?

+0

करता है ओएस एक्स 'sed' इस समर्थन करते हैं:' sed 's//\ O12/g''? शून्य के बजाए यह पत्र "ओ" है। एक नई लाइन के लिए ऑक्टल मान 12 है। यह लिनक्स पर काम करता है (लेकिन ऐसा करता है \ n')। –

+0

@ डेनिसविल्लियमसन मेरे बैश में काम नहीं करता :) – Rodrigo

+0

लॉल, इसलिए यह मेरे ओएस एक्स 'sed' के साथ काम नहीं करता :) – Rodrigo

उत्तर

18

यहाँ एसईडी

echo "Replace <newLine> it by <newLine> NEWLINE <newLine> in my OSX terminal <newLine> and bash script" | sed 's/<newLine>/\'$'\n/g' 

उपयोग कर रहा है और यहाँ है एक ऐसे ब्लॉग पोस्ट का कारण बताते हुए - https://nlfiedler.github.io/2010/12/05/newlines-in-sed-on-mac.html

+0

बहुत बढ़िया लिंक। – Rodrigo

4

का उपयोग केवल बैश:

STR="Replace <newLine> it by <newLine> NEWLINE <newLine> in my OSX terminal <newLine> and bash script" 
$ echo ${STR//<newLine>/\\n} 
Replace \n it by \n NEWLINE \n in my OSX terminal \n and bash script 

$ echo -e ${STR//<newLine>/\\n} 
Replace 
it by 
NEWLINE 
in my OSX terminal 
and bash script 

यहाँ एक त्वरित विवरण - वाक्य रचना sed की जगह वाक्य रचना के समान है, लेकिन आप स्ट्रिंग के सभी उदाहरणों की जगह इंगित करने के लिए एक डबल स्लैश (//) का उपयोग करें। अन्यथा, केवल स्ट्रिंग की पहली घटना को प्रतिस्थापित किया जाता है।

1

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

echo "Replace <newLine> it by <newLine> NEWLINE <newLine> in my OSX terminal <newLine> and bash script" | 
sed 'G;:a;s/<newLine>\(.*\(.\)\)$/\2\1/;ta;s/.$//' 
Replace 
it by 
NEWLINE 
in my OSX terminal 
and bash script 

संपादित करें: OSX कई आदेशों को स्वीकार नहीं करता देखें here

echo "Replace <newLine> it by <newLine> NEWLINE <newLine> in my OSX terminal <newLine> and bash script" | 
sed -e 'G' -e ':a' -e 's/<newLine>\(.*\(.\)\)$/\2\1/' -e 'ta' -e 's/.$//' 
Replace 
it by 
NEWLINE 
in my OSX terminal 
and bash script 

फिर भी एक और तरीका है:

echo "Replace <newLine> it by <newLine> NEWLINE <newLine> in my OSX terminal <newLine> and bash script" | 
sed $'s|<newLine>|\\\n|g' 
Replace 
it by 
NEWLINE 
in my OSX terminal 
and bash script 
+0

लॉल, क्षमा करें, यह ओएसएक्स बैश में काम नहीं करता है। – Rodrigo

+0

@Rodrigo आपके उत्तर के लिए धन्यवाद, ऐसा लगता है कि ओएसएक्स जीएनयू sed के रूप में कई कमांड स्वीकार नहीं करता है। संपादन को ओएसएक्स को अनुपालन करना चाहिए। – potong

संबंधित मुद्दे