Help with a basic UNIX script
Hi there!
I need to write a basic script based on the following criteria: First of all I create a file called "script1" using the cat command and then I add a few lines to it and save it. Next, I need to write a script to do the following: a script which takes to arguments, the first being a line of text, the second being the newly created file (script1). The script should take the first argument and insert it into the very top of the file (script1) name in your seconds argument. The file must then be saved and keep its original name. TIA Mike BTW, I am using the BASH shell and VI editor. |
Per the rules:
Do not expect LQ members to do your homework - you will learn much more by doing it yourself. Where are you needing help? |
Quote:
Hi, I have tried the code below: echo this is the line I want to insert >> /home/(myname)/script1 but when I do this it puts the line at the end of the file, is using the above even scripting? should I send the file to VI first? Mike P.S. I take your point also, I shouldnt have been so lazy and posted the way I did. :) |
There is no way to add lines at top of a file.
You need to do a trick: Create a new file, with the string on it, and append to the end of that file, the contents of the other file. After that, rename the files. The linux commands are with you. :) good luck, |
Hi there, thanks to those who replied.
I came up with this script which seems to work, s1 being the pre-written file I needed to append too. echo "The title" > tempfile cat s1 >> tempfile cat tempfile > s1 Is there a smarter way to do this? Thanks again EDIT: forgot to add "rm tempfile" as last line of script. Mike |
1. Use command line parameters, rather than hardcoded stuff. But you probably figured that one out yourself.
2. Don't use "cat tempfile > s1", as this may yet again read all lines in the file tempfile and print them into file "s1" (line by line). Using "mv" instead of cat (ie "mv tempfile s1") may be slightly faster, especially when you're dealing with big text files. 3. There are plenty of alternatives: Perl scripting, dd, sed, awk, ... but those can be a little tricky and may not be as fast as your current approach. ie Code:
awk 'BEGIN { print "your_extra_line"; print; }' s1 > tempfile |
Thanks for the info, is it possible to move text like i did but instead plant it in the middle of a file? I havent learned about awk, sed and greb etc yet. Thats later on in the course.
I amended my script to this: echo "The title" > tempfile cat s1 >> tempfile move tempfile s1 Thanks! |
Anyone give me a clue on how to append text to the middle of a file?
regards Mike |
Quote:
Code:
echo "The title" | cat - s1 > s1 |
Quote:
|
A combination of one or more "cat", "grep", "sed", "head" and/or "awk" commands should do the trick.
A Perl scripting might help too. It really depends on what you want exactly. ie a simple Shell script solution would be: Code:
#!/bin/bash In short: play around with the commands we gave you (read their man pages for starters) and you'll see the light someday... |
Or plain old sed ...
If you need to insert after some text: Code:
sed -i '/text after which to insert/i\ Or, if the line number is what you have rather than content, e.g. line 5 Code:
sed -i '5i\ Cheers, Tink |
Hi, thanks for the replies, do you think should I will need to use the "wc -l" and then take the result and divide it by 2 to get half way down the page and then insert from there? is that possible with the right code and it is practical or should I look at other options.
Thanks again, your help is much appreciated! Mike EDIT: oops, had not read the 2 posts made recently by timmeke and tinster. Thanks |
I am not at home to try this code below but does it look likely that it will work?
echo "The middle" | sed -i 5i >> myexistingfile.txt Regards Mike |
Quote:
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 |
All times are GMT -5. The time now is 02:27 AM. |