Thanks, although it wasn&#39;t meant to be a bat.  :)  Because ed is on plan 9, Solaris, Linux, and Mac, out of the box and pretty consistently, I used it as a real interactive editor for a while, after Brantley Coile told me that using it made a difference in the way he thought about his code.<br>
<br>I found it to be a surprisingly useful editor and am fond of it now even though I&#39;ve gone back to using bigger, less ubiquitous interactive editors.<br><br>There&#39;s a funny page about ed that y&#39;all might have already seen:<br>
<br>  <a href="http://www.gnu.org/fun/jokes/ed.msg">http://www.gnu.org/fun/jokes/ed.msg</a><br><br><div class="gmail_quote">On Thu, Mar 29, 2012 at 8:09 AM, Jim Kinney <span dir="ltr">&lt;<a href="mailto:jim.kinney@gmail.com">jim.kinney@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I must now add ed to my daily tool pile. grep, awk [s]ed, vi[m], bash.<br><br>That was a very good &quot;clue bat&quot; on why ed should still be used. a 1M line file would be easy for ed but pain for sed.<br>
<br>Thanks!<br>
<br><div class="gmail_quote"><div class="im">On Wed, Mar 28, 2012 at 9:57 PM, Ed Cashin <span dir="ltr">&lt;<a href="mailto:ecashin@noserose.net" target="_blank">ecashin@noserose.net</a>&gt;</span> wrote:<br></div><div><div class="h5">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Thanks for mentioning the non-stream editor!  They made sed for streams, because ed is for files.  It is at times like this when I sincerely regret the way distros are beginning to omit ed for the first time in decades.<br>


<br>There&#39;s an ed move command called &quot;m&quot;.  Move this line to that line.  The one liner below does the same thing as this interactive session<br><br>$m0<br>w<br>q<br><br>ecashin@reynolds:~$ head /etc/passwd | nl &gt; ~/tmp/a<br>


ecashin@reynolds:~$ cp ~/tmp/a ~/tmp/b<br>ecashin@reynolds:~$ printf &#39;$m0\nw\nq\n&#39; | ed ~/tmp/b<br>414<br>414<br>ecashin@reynolds:~$ diff -u ~/tmp/a ~/tmp/b<br>--- /home/ecashin/tmp/a 2012-03-28 21:40:25.000000000 -0400<br>


+++ /home/ecashin/tmp/b 2012-03-28 21:41:44.000000000 -0400<br>@@ -1,3 +1,4 @@<br>+    10 news:x:9:9:news:/var/spool/news:/bin/sh<br>      1 root:x:0:0:root:/root:/bin/bash<br>      2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh<br>


      3 bin:x:2:2:bin:/bin:/bin/sh<br>@@ -7,4 +8,3 @@<br>      7 man:x:6:12:man:/var/cache/man:/bin/sh<br>      8 lp:x:7:7:lp:/var/spool/lpd:/bin/sh<br>      9 mail:x:8:8:mail:/var/mail:/bin/sh<br>-    10 news:x:9:9:news:/var/spool/news:/bin/sh<br>


ecashin@reynolds:~$ <br><div><div><br><div class="gmail_quote">On Wed, Mar 28, 2012 at 12:41 PM, Richard Bronosky <span dir="ltr">&lt;<a href="mailto:Richard@bronosky.com" target="_blank">Richard@bronosky.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Be careful doing this with large files. You are storing the whole file<br>
in memory.<br>
<br>
I would do this in 2 passes.<br>
<br>
# First get the last line into a new file. (assuming the file in<br>
question is passed in as the first argument)<br>
tail -n1 $1 &gt; $1.mod<br>
# Second add the rest of the file, less the last line.<br>
sed &#39;$d&#39; $1 &gt;&gt; $1.mod<br>
<br>
This is working with streams. It requires an additional $filesize of<br>
disk space, but it does not require $filesize of RAM.<br>
<br>
If you want to be really efficient, use ed. ;-)<br>
# This will trim the last line of the file in place, but I&#39;m not<br>
taking the time to figure out how to add it to the beginning.<br>
ed &quot;$1&quot; &lt;&lt; EOF<br>
$<br>
d<br>
w<br>
EOF<br>
<div><div><br>
On Mar 28, 2012 11:19 AM, &quot;Lightner, Jeff&quot; &lt;<a href="mailto:JLightner@water.com" target="_blank">JLightner@water.com</a>&gt; wrote:<br>
&gt;<br>
&gt; I found this works:<br>
&gt;<br>
&gt; awk &#39;{a[NR]=$0} END {print a[NR]; for (i=1;i&lt;NR;i++) print a[i]}&#39; originalfile &gt;newfile<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; Where you replace originalfile and newfile with real file names.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; ________________________________<br>
&gt;<br>
&gt; From: <a href="mailto:ale-bounces@ale.org" target="_blank">ale-bounces@ale.org</a> [mailto:<a href="mailto:ale-bounces@ale.org" target="_blank">ale-bounces@ale.org</a>] On Behalf Of Lightner, Jeff<br>
&gt; Sent: Wednesday, March 28, 2012 11:10 AM<br>
&gt; To: Atlanta Linux Enthusiasts<br>
&gt; Subject: [ale] Move last line of a file to first line<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; We have variable length text files being received in which the “header” line we use in automated processing is the last line of the file rather than the first line.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; What is the best way to move that last line of a text file to be the first line?<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; Please answer the question as asked and don’t suggest making the file be in the correct order when we receive it or changing the automated processing to read the last line first.  Assume those aren’t options.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; What I came up with was to do tail -1 &gt;newfile and head -&lt;number of lines – 1&gt; but was thinking there ought to be a better way.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; I see sed can deal with last line, first line and insertion but the examples I’m finding address either/or not moving last line to first line.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; Athena®, Created for the Cause™<br>
&gt;<br>
&gt; Making a Difference in the Fight Against Breast Cancer<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; How and Why I Should Support Bottled Water!<br>
&gt; Do not relinquish your right to choose bottled water as a healthy alternative to beverages that contain sugar, calories, etc. Your support of bottled water will make a difference! Your signatures count! Go to <a href="http://www.bottledwatermatters.org/luv-bottledwater-iframe/dswaters" target="_blank">http://www.bottledwatermatters.org/luv-bottledwater-iframe/dswaters</a> and sign a petition to support your right to always choose bottled water. Help fight federal and state issues, such as bottle deposits (or taxes) and organizations that want to ban the sale of bottled water. Support community curbside recycling programs. Support bottled water as a healthy way to maintain proper hydration. Our goal is 50,000 signatures. Share this petition with your friends and family today!<br>



&gt;<br>
&gt;<br>
&gt;<br>
&gt; ---------------------------------<br>
&gt; CONFIDENTIALITY NOTICE: This e-mail may contain privileged or confidential information and is for the sole use of the intended recipient(s). If you are not the intended recipient, any disclosure, copying, distribution, or use of the contents of this information is prohibited and may be unlawful. If you have received this electronic transmission in error, please reply immediately to the sender that you have received the message in error, and delete it. Thank you.<br>



&gt; ----------------------------------<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
</div></div><div><div>&gt; _______________________________________________<br>
&gt; Ale mailing list<br>
&gt; <a href="mailto:Ale@ale.org" target="_blank">Ale@ale.org</a><br>
&gt; <a href="http://mail.ale.org/mailman/listinfo/ale" target="_blank">http://mail.ale.org/mailman/listinfo/ale</a><br>
&gt; See JOBS, ANNOUNCE and SCHOOLS lists at<br>
&gt; <a href="http://mail.ale.org/mailman/listinfo" target="_blank">http://mail.ale.org/mailman/listinfo</a><br>
&gt;<br>
<br>
_______________________________________________<br>
Ale mailing list<br>
<a href="mailto:Ale@ale.org" target="_blank">Ale@ale.org</a><br>
<a href="http://mail.ale.org/mailman/listinfo/ale" target="_blank">http://mail.ale.org/mailman/listinfo/ale</a><br>
See JOBS, ANNOUNCE and SCHOOLS lists at<br>
<a href="http://mail.ale.org/mailman/listinfo" target="_blank">http://mail.ale.org/mailman/listinfo</a><br>
</div></div></blockquote></div><br><br clear="all"><br></div></div><span><font color="#888888">-- <br>  Ed Cashin &lt;<a href="mailto:ecashin@noserose.net" target="_blank">ecashin@noserose.net</a>&gt;<br>  <a href="http://noserose.net/e/" target="_blank">http://noserose.net/e/</a><br>

  <a href="http://www.coraid.com/" target="_blank">http://www.coraid.com/</a><br>

</font></span><br>_______________________________________________<br>
Ale mailing list<br>
<a href="mailto:Ale@ale.org" target="_blank">Ale@ale.org</a><br>
<a href="http://mail.ale.org/mailman/listinfo/ale" target="_blank">http://mail.ale.org/mailman/listinfo/ale</a><br>
See JOBS, ANNOUNCE and SCHOOLS lists at<br>
<a href="http://mail.ale.org/mailman/listinfo" target="_blank">http://mail.ale.org/mailman/listinfo</a><br>
<br></blockquote></div></div></div><br><br clear="all"><br>-- <br><div class="HOEnZb"><div class="h5">-- <br>James P. Kinney III<br><br>As long as the general population is passive, apathetic, diverted to 
consumerism or hatred of the vulnerable, then the powerful can do as 
they please, and those who survive will be left to contemplate the 
outcome.<br>- <i><i><i><i>2011 Noam Chomsky<br><br><a href="http://heretothereideas.blogspot.com/" target="_blank">http://heretothereideas.blogspot.com/</a><br></i></i></i></i><br>
</div></div><br>_______________________________________________<br>
Ale mailing list<br>
<a href="mailto:Ale@ale.org">Ale@ale.org</a><br>
<a href="http://mail.ale.org/mailman/listinfo/ale" target="_blank">http://mail.ale.org/mailman/listinfo/ale</a><br>
See JOBS, ANNOUNCE and SCHOOLS lists at<br>
<a href="http://mail.ale.org/mailman/listinfo" target="_blank">http://mail.ale.org/mailman/listinfo</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br>  Ed Cashin &lt;<a href="mailto:ecashin@noserose.net">ecashin@noserose.net</a>&gt;<br>  <a href="http://noserose.net/e/">http://noserose.net/e/</a><br>  <a href="http://www.coraid.com/">http://www.coraid.com/</a><br>