मैं GNU sed, POSIX sedऔर BSD sedके असंख्य विकल्पों के साथ भ्रमित हूँ । मैं \nइन तीन sedप्रकारों का उपयोग करते हुए न्यूलाइन वर्ण के साथ शाब्दिक को कैसे बदलूं ?
foo\\nbarया जैसे foo\\\nbar?
मैं GNU sed, POSIX sedऔर BSD sedके असंख्य विकल्पों के साथ भ्रमित हूँ । मैं \nइन तीन sedप्रकारों का उपयोग करते हुए न्यूलाइन वर्ण के साथ शाब्दिक को कैसे बदलूं ?
foo\\nbarया जैसे foo\\\nbar?
जवाबों:
sed 's/\\n/\
/g'
प्रतिस्थापन स्ट्रिंग में रिटर्न मारने से पहले बैकस्लैश को नोटिस करें।
sed1979 में यूनिक्स v7 में मूल कमांड के साथ काम किया । केवल एक जगह जहां काम नहीं हो सकता है sed, वह कुछ छीन-डाउन व्यस्त बॉक्स-आधारित लोगों की तरह गैर-पॉसिक्स छीन-डाउन कार्यान्वयन होगा । यह csh में काम नहीं करेगा, लेकिन यह csh समस्या है।
\\nखोज भाग में उपयोग किया जाता है, इसलिए \nप्रतिस्थापन में उपयोग क्यों नहीं किया जाता है? पहले लगता है कि बाद में मौजूद है। अर्थात। क्यों नहीं$ echo '1\n2'|sed 's/\\n/\n/g'
\nयह एक शाब्दिक है, जिसका अर्थ है कि यह दो वर्णों के रूप में प्रकट होता है: एब्लेसलैश और उसके बाद nएक भी न्यूलाइन वर्ण नहीं। इसलिए, बैकस्लैश को शाब्दिक बनाने के लिए दो बैकस्लैश और उसके बादn
चूँकि आपके पास पहले से ही आपका पोर्टेबल sedउत्तर है, मैं सिर्फ इसका उल्लेख करूँगा कि sedअगर आपको किसी तरह से नई सुर्खियों में लाने की आवश्यकता हो तो शायद ही सबसे अच्छा उपकरण है। पर्ल बहुत ही पोर्टेबल है जैसा कि sed, अधिकांश * निक्स सिस्टम पर डिफ़ॉल्ट रूप से स्थापित होता है और इससे बहुत आसानी से निपट सकते हैं:
printf '%s\n' 'aa\nbb' | perl -pe 's/\\n/\n/g'
एक और बहुत पोर्टेबल विकल्प है awk:
printf '%s\n' 'aa\nbb' | awk '{gsub("\\\\n","\n")};1'
सोलारिस पर, मानक awk / usr / xpg4 / bin में उपयोग करने के लिए याद रखें, इन / बिन में से एक एक ऐतिहासिक है और नई स्क्रिप्ट के लिए उपयोग नहीं किया जाना चाहिए।
awkसमान पोर्टेबिलिटी समस्याएं हैं (क्या मेरा awkसादा पुराना है awk, nawkया gawk?)। दरअसल, मेरे सोलारिस बॉक्स में वर्जन की कमी है gsub()। यहां मेरा वोट पर्ल ( perl -nlawe '...'स्वचालित व्यवहार का अनुमान लगाता है awk) के लिए है।
awkपोर्टेबिलिटी के लिए, awkउस के एक संस्करण के साथ छड़ी POSIX शिकायत है और केवल उन सुविधाओं का उपयोग करें और आपको ठीक होना चाहिए। सोलारिस पर आपको एक जैसा मिलेगा /usr/xpg4/bin/awk।
echo "aa\nbb" | awk '{gsub(/\\n/,"\n");}1;'?
gsub()हर जगह बस काम करना चाहिए। यहां तक कि बिजीबॉक्स भी है awk।
यदि Hसुनार खाली है तो आप भी कर सकते हैं:
sed '/\\n/G;s/\\n\(.*\)\(.\)/\2\1/;P;D'
... लेकिन uxnut का जवाब पहले से ही तेज और अधिक सरल दोनों है, इसलिए आप इसे अपनी इच्छानुसार ले सकते हैं।
एक और बाहरी संभावना:
INPUT | sed -n l | while read v ; do printf "${v%?}" ; done
लेकिन सावधान रहें, ^ जो कि सभी मानक सी-स्टाइल \बैकस्लैश \bएस्केप का अनुवाद करता है - जैसे कि एकस्पेस और \rईटर्न और \00ऑक्टल्स और व्हावेवे।
gnu sedनिम्नलिखित के साथ भी काम करता है:
gsed -n -e 'H;${x;s/\\n/\n/g;p;}'
आपको sed में एक समाधान की आवश्यकता है, और जो पहले से ही नीचे दिया गया है। लेकिन मैं एक और संभावना जोड़ना चाहता था कि IMHO सिर्फ आसान और तेज है,
tr -d "\n"