echo -n 'I hate cats' > cats.txt
यह आदेश एकल उद्धरण के बीच 11 पात्रों के साथ 'cats.txt' की सामग्री को बस जाएँगे। यदि आप इस चरण में cats.txt के आकार की जांच करते हैं तो यह 11 बाइट होना चाहिए।
sed -i '' 's/hate/love/' cats.txt
यह आदेश cats.txt फ़ाइल लाइन द्वारा लाइन पढ़ा जाएगा, और (एक फ़ाइल जहाँ प्रत्येक पंक्ति 'नफरत' 'प्यार' द्वारा प्रतिस्थापित का पहला उदाहरण पड़ा है साथ बदलें अगर इस तरह के एक उदाहरण मौजूद है)। महत्वपूर्ण हिस्सा समझ रहा है कि एक रेखा क्या है।
Normally, sed cyclically copies a line of input, not including its
terminating newline character, into a pattern space, (unless there is
something left after a ``D'' function), applies all of the commands
with addresses that select that pattern space, copies the pattern
space to the standard output, appending a newline, and deletes the
pattern space.
नोट appending a newline
हिस्सा: sed आदमी पृष्ठ से। आपके सिस्टम पर, sed अभी भी आपकी फ़ाइल को एक पंक्ति के रूप में व्याख्या कर रहा है, भले ही कोई नई समाप्ति न हो। तो आउटपुट 11 वर्ण होंगे, साथ ही संलग्न नई लाइन भी होगी। अन्य प्लेटफॉर्म पर यह आवश्यक नहीं होगा। कभी-कभी sed पूरी तरह से फ़ाइल में अंतिम पंक्ति को छोड़ देगा (प्रभावी रूप से इसे हटा रहा है) क्योंकि it is not really a line! लेकिन आपके मामले में, sed मूल रूप से आपके लिए फ़ाइल को ठीक कर रहा है (इसमें फ़ाइल के रूप में कोई लाइन नहीं है, यह sed को टूटी हुई इनपुट है)।
यहां और विवरण देखें: Why should text files end with a newline?
आपकी समस्या के लिए एक वैकल्पिक दृष्टिकोण के लिए इस सवाल का देखें:
echo -n 'I hate cats' > cats.txt
SAFE=$(cat cats.txt; echo x)
SAFE=$(printf "$SAFE" | sed -e 's/hate/love/')
SAFE=${SAFE%x}
इस तरह बिल्लियों यदि: SED adds new line at the end
स्रोत
2012-11-12 00:18:25
10,6 पर नहीं होता है। शायद आपका संस्करण हो सकता है। –
यह 10.6.8 और 10.7.3 पर हो रहा है। हम्म। –
आपका संपादन महत्वपूर्ण रूप से चीजों को बदलता है। मैंने नीचे जवाब दिया है। –