LinuxQuestions.org
Welcome to the most active Linux Forum on the web.
Home Forums Tutorials Articles Register
Go Back   LinuxQuestions.org > Forums > Linux Forums > Linux - Newbie
User Name
Password
Linux - Newbie This Linux forum is for members that are new to Linux.
Just starting out and have a question? If it is not in the man pages or the how-to's this is the place!

Notices


Reply
  Search this Thread
Old 05-30-2006, 03:12 PM   #16
mike9287
Member
 
Registered: May 2006
Location: North England
Distribution: Mandriva
Posts: 64

Original Poster
Rep: Reputation: 15

Quote:
Originally Posted by Tinkster
Nope
sed -i tells sed to modify the file in-place, and the text to
be inserted comes behind the insert-command (i).

sed -i '5i\
The middle' myexistingfile.txt

is what you want to do.


Cheers,
Tink

Thanks for reply, I tried what you said and I get error: invalid option --i

Any idea what I might be doing wrong? I tried it on command line and in a file I made with cat then executed with 'sh'

Thanks

Mike
 
Old 05-30-2006, 03:33 PM   #17
Tinkster
Moderator
 
Registered: Apr 2002
Location: earth
Distribution: slackware by choice, others too :} ... android.
Posts: 23,067
Blog Entries: 11

Rep: Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928
Quote:
Originally Posted by mike9287
Thanks for reply, I tried what you said and I get error: invalid option --i

Any idea what I might be doing wrong? I tried it on command line and in a file I made with cat then executed with 'sh'

Thanks

Mike
Probably using an ancient sed ... in that case try
Code:
#!/bin/sh
sed  '5i\
The middle' myexistingfile.txt > myexistingfile.txt.tmp
mv myexistingfile.txt.tmp myexistingfile.txt

Cheers,
Tink
 
Old 05-31-2006, 04:24 AM   #18
mike9287
Member
 
Registered: May 2006
Location: North England
Distribution: Mandriva
Posts: 64

Original Poster
Rep: Reputation: 15
Quote:
Originally Posted by Tinkster
Probably using an ancient sed ... in that case try
Code:
#!/bin/sh
sed  '5i\
The middle' myexistingfile.txt > myexistingfile.txt.tmp
mv myexistingfile.txt.tmp myexistingfile.txt

Cheers,
Tink

Hey Tink, Thanks again.

I am at work at the moment so I havent got a shell handy. I took a look into iserting with sed using options "i" and "a" and found "i" appends before the line and "a" after the line, this should mean I can use the same script with '1i\ in my first script as well as in this one.

what does "#!/bin/sh" actually tell the shell at the start of the script? just so I know for future reference.

Thanks

Mike
 
Old 05-31-2006, 04:48 AM   #19
Tinkster
Moderator
 
Registered: Apr 2002
Location: earth
Distribution: slackware by choice, others too :} ... android.
Posts: 23,067
Blog Entries: 11

Rep: Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928
Quote:
Originally Posted by mike9287
Hey Tink, Thanks again.

I am at work at the moment so I havent got a shell handy.
What a shame - you work in the wrong place! ;}

Quote:
Originally Posted by mike9287
what does "#!/bin/sh" actually tell the shell at the start of the script? just so I know for future reference.
If a text-file is marked executable and has a
#!/path/to/executable
in it the bash will try to use the executable in there
to run the rest of the file as a script .

Normally you'd have to invoke a script (if it didn't
have the line) e.g. like
sh my_script
instead of just
./my_script


Cheers,
Tink
 
Old 05-31-2006, 05:47 AM   #20
mike9287
Member
 
Registered: May 2006
Location: North England
Distribution: Mandriva
Posts: 64

Original Poster
Rep: Reputation: 15
Quote:
Originally Posted by Tinkster
What a shame - you work in the wrong place! ;}

^^ Tell me about it.. I work in retail and I am not even supposed to use the Internet but only the companys Intranet, I want out of this job so bad, thats why I am here trying to learn UNIX, I want to become a Java programmer and need to learn UNIX and SQL before the training company will learn me Java.

Mike
 
Old 05-31-2006, 01:21 PM   #21
Tinkster
Moderator
 
Registered: Apr 2002
Location: earth
Distribution: slackware by choice, others too :} ... android.
Posts: 23,067
Blog Entries: 11

Rep: Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928
Quote:
Originally Posted by mike9287
^^ Tell me about it.. I work in retail and I am not even supposed to use the Internet but only the companys Intranet, I want out of this job so bad, thats why I am here trying to learn UNIX,
Good on yah.

Quote:
Originally Posted by mike9287
I want to become a Java programmer and need to learn UNIX and SQL before the training company will learn me Java.

Mike
Sorry, can't resist that one; it's "will teach me Java",
learn is what you do, teach is what they do ;}


Cheers,
Tink
 
Old 05-31-2006, 04:28 PM   #22
mike9287
Member
 
Registered: May 2006
Location: North England
Distribution: Mandriva
Posts: 64

Original Poster
Rep: Reputation: 15
Quote:
Originally Posted by Tinkster
Good on yah.


Sorry, can't resist that one; it's "will teach me Java",
learn is what you do, teach is what they do ;}


Cheers,
Tink
Hehe, reminds me of my english teacher when people use to ask to lend a ruler rather than borrow

I tried the script and still get the invalid option --i. I thought it might have been the shell I
was using which is part of the "putty" program which I use through my windows account, I then logged into my Mandriva Korn shell and got the same kind of trouble, in Mandriva I get this

sed: -e expression #1 char 10: unknown command `m'

my script was run from a file saved in cat as follow:

#!/bin/sh
sed '2i\
add me to the middle'
myfile > myfile.tmp
mv myfile.tmp myfile


Thanks

Mike

Last edited by mike9287; 05-31-2006 at 04:29 PM.
 
Old 05-31-2006, 04:41 PM   #23
Tinkster
Moderator
 
Registered: Apr 2002
Location: earth
Distribution: slackware by choice, others too :} ... android.
Posts: 23,067
Blog Entries: 11

Rep: Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928
Quote:
Originally Posted by mike9287
Hehe, reminds me of my english teacher when people use to ask to lend a ruler rather than borrow :)
Aye - English is quite a neat and rich language, and it makes
me cringe to see the natives butcher it like that ;}

We have a shop call Mr Rentals here where you can hire all
kinds of appliances (dish-washers, TV sets, ... ) ... they recently
added PC hardware to their repertoire, and the new add says
"Mr Rentals now rents computers!". I was so tempted to ask them
how much a day they'd pay for my athlon. ;}

Quote:
Originally Posted by mike9287
I tried the script and still get the invalid option --i. I thought it might have been the shell I
was using which is part of the "putty" program which I use through my windows account, I then logged into my Mandriva Korn shell and got the same kind of trouble, in Mandriva I get this

sed: -e expression #1 char 10: unknown command `m'

my script was run from a file saved in cat as follow:

#!/bin/sh
sed '2i\
add me to the middle'
myfile > myfile.tmp
mv myfile.tmp myfile


Thanks

Mike
That's a weird error message to get there; the script IS faulty, but it
shouldn't run to completion.

You need to either a) join these lines
Code:
 add me to the middle' 
 myfile > myfile.tmp
to look like
Code:
 add me to the middle' myfile > myfile.tmp
or b) add a backslash to the first one (like so)
Code:
 add me to the middle' \
 myfile > myfile.tmp

Cheers,
Tink
 
Old 06-01-2006, 02:46 PM   #24
mike9287
Member
 
Registered: May 2006
Location: North England
Distribution: Mandriva
Posts: 64

Original Poster
Rep: Reputation: 15
Hi again.

I tried the ways you mentioned but still dont get the desired results, I am on the part of the course which covers sed and grep etc and it say the following syntax should be used with sed:

sed [-n][-e]'command' file(s)

and command being as : [address]i\text //to insert

which is basically what you showed me and what I have tried to do. I tried this on the command line which as far as I can see follows the above syntax:

sed -e '2i\put me in the middle' myfile
also this
sed '2i\put me in the middle' myfile
and this
sed -e '2i\put me in the middle\'myfile
and this
sed -e '2i\put me in the middle' > myfile

as well as using sh to execute my script after writing it in cat. One of the errors I am getting now is:

sed -e expression #1, char 4: extra characters after command

Anyone got any ideas what I am doing wrong?

Thanks for looking

Mike
 
Old 06-01-2006, 03:51 PM   #25
mike9287
Member
 
Registered: May 2006
Location: North England
Distribution: Mandriva
Posts: 64

Original Poster
Rep: Reputation: 15
whooo hooo!!

I managed to figure this out, I found a guide on the IBM website and with what I have learned from this thread I came up with this script:

echo '2i\
This is the line I have been trying to insert for ages' > tempfile
sed -f tempfile myfile
rm tempfile


and bingo it works, thanks to all who helped and many thanks to Tinkster the human grammar and syntax compiler who is watching your every sentence - so beware! thanks mate, would have gave up long ago if it wasnt for your help

Mike
 
Old 06-01-2006, 04:19 PM   #26
Tinkster
Moderator
 
Registered: Apr 2002
Location: earth
Distribution: slackware by choice, others too :} ... android.
Posts: 23,067
Blog Entries: 11

Rep: Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928
Well, I'm glad it works in the end, but I still don't understand
why it doesn't do the version I posted. It's perfectly sane, and
works on three different distros (SLES9, Debian Sarge and Slack 10.2)
I can get my paws on the moment, plus in solaris 10 and 8 :}

What distro are you using again, with which version of sed?


Cheers,
Tink
 
Old 06-01-2006, 04:38 PM   #27
mike9287
Member
 
Registered: May 2006
Location: North England
Distribution: Mandriva
Posts: 64

Original Poster
Rep: Reputation: 15
Quote:
Originally Posted by Tinkster
Well, I'm glad it works in the end, but I still don't understand
why it doesn't do the version I posted. It's perfectly sane, and
works on three different distros (SLES9, Debian Sarge and Slack 10.2)
I can get my paws on the moment, plus in solaris 10 and 8 :}

What distro are you using again, with which version of sed?


Cheers,
Tink
Hi, I have windows on one partition and Mandriva on the other, although I tried early on with Mandriva I have been using a program (as recommended by the Academy) called "Putty" through my windows account, the Academy uses Suse on there servers. Putty is a telnet/ssh client and I use it to connect to the academys servers. In manual it says "sed(1) 1998" which I would figure is probably and old version.

Thanks again

Mike

http://www.chiark.greenend.org.uk/~sgtatham/putty/
 
Old 06-01-2006, 05:43 PM   #28
Tinkster
Moderator
 
Registered: Apr 2002
Location: earth
Distribution: slackware by choice, others too :} ... android.
Posts: 23,067
Blog Entries: 11

Rep: Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928Reputation: 928
Quote:
Originally Posted by mike9287
Hi, I have windows on one partition and Mandriva on the other, although I tried early on with Mandriva I have been using a program (as recommended by the Academy) called "Putty" through my windows account, the Academy uses Suse on there servers. Putty is a telnet/ssh client and I use it to connect to the academys servers. In manual it says "sed(1) 1998" which I would figure is probably and old version.

Thanks again

Mike

http://www.chiark.greenend.org.uk/~sgtatham/putty/
Hi Mike ...

OK, now my last question :)

I assume that you're copying & pasting from a winDOHs
browser to the linux box via putty?

In that case, the screwed-up error message may well
stem from the DOS CR/LF combos :}

In the ssh session try "dos2unix your_script" with the
original content, and then run it again.

I have that idea that the ^M DOS files will have on each
end of a line may be confusing sed ;}


Cheers,
Tink
 
Old 06-02-2006, 02:14 AM   #29
mike9287
Member
 
Registered: May 2006
Location: North England
Distribution: Mandriva
Posts: 64

Original Poster
Rep: Reputation: 15
Quote:
Originally Posted by Tinkster
Hi Mike ...

OK, now my last question

I assume that you're copying & pasting from a winDOHs
browser to the linux box via putty?

In that case, the screwed-up error message may well
stem from the DOS CR/LF combos :}

In the ssh session try "dos2unix your_script" with the
original content, and then run it again.

I have that idea that the ^M DOS files will have on each
end of a line may be confusing sed ;}


Cheers,
Tink
Yo, Nope I am just using the good ol' keyboard, the shell has a fit when I tried to cut and paste. I will try what you said when I get back home though, I can't understand what I was doing wrong either, every guide on sed I found basically operated as you suggested but on the IBM site they recommended a script file that you would call with the -f option, even the academy tutorials were the same as you explained and I couldnt get them to work either.

ta
Mike
 
  


Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off



Similar Threads
Thread Thread Starter Forum Replies Last Post
Basic commands in unix/linux sathish80 Linux - Newbie 5 03-24-2006 01:45 PM
unix shell script cxy0481 Programming 9 11-20-2005 08:15 AM
Basic Unix commands req dark_light Linux - Newbie 7 04-04-2002 06:33 PM
How to schedule unix script periodically from unix os level??? gopi_20us Programming 2 03-11-2002 06:45 AM
Basic Unix Program for Linux Daniel Programming 10 07-05-2001 12:17 PM

LinuxQuestions.org > Forums > Linux Forums > Linux - Newbie

All times are GMT -5. The time now is 04:34 AM.

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Open Source Consulting | Domain Registration