Visit Our UNIX and Linux User Community


SED- Insert text at top of file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting SED- Insert text at top of file
# 8  
Old 07-01-2002
I had a play with this and it's all about the quotes/double quotes to make the variable expand correctly. This works in bash...

FILENAME=input_file
NEWFILENAME=output_file
sed '$a\
PR_DbConfigEnd '"${FILENAME}"' ' $FILENAME > $NEWFILENAME

Notice to make the variable expand I used '"${FILENAME}"'

That's single, double ${FILENAME} double, single.

Try that.
# 9  
Old 07-02-2002
Another solution is to escape the dollar sign:
sed "\$a\\
# 10  
Old 07-02-2002
Hos does this work..the double backslash. I've tried numerous combinations in bash, ksh and sh. But still the only way was as i suggested above. i couldn't get it working with the \\.

Can you post the rest...i.e so I can see how the quotes etc should work around the variable in the sed text.

i.e.

FILENAME=input_file
NEWFILENAME=output_file
sed '$a\
PR_DbConfigEnd '"${FILENAME}"' ' $FILENAME > $NEWFILENAME
# 11  
Old 07-02-2002
The trouble with posting a complete solution is that I don't exactly understand the problem completely. But here goes:
Code:
#! /usr/bin/ksh
FILENAME=input_file
NEWFILENAME=output_file
sed -e "\$a\\
PR_DbConfigEnd ${FILENAME}" <  $FILENAME > $NEWFILENAME
exit 0

I can only hope that there is some good reason for the filename to be appear inside the quotes. This will cause it to be part of the data inserted into the file. That really looks like a bug to me. If so, just delete that part. But for better or worse, I am copying from the other examples in this thread.

As for how it works, we need sed to see a line like:
$a\
but when we use double quotes, ksh processes $a as if it were a variable. But inside double quotes, a backslash removes any special power the next character has, so the \$a becomes just $a and ksh moves on. To actually get a backslash, we need \\. The first backslash is eaten by ksh as it processes the literal and this makes it leave the next backslash alone.

And bash works the same way.
# 12  
Old 07-02-2002
Got that now..I wasn't getting the backslash before the $a.

So it is working. The only reason for putting the filename in the quotes as I did was that it was the only way I could get the end result to work. So Both actually acheive teh same result now..although I coulnn't explain why mine does! your on the other hand I do understand.
# 13  
Old 07-03-2002
Quote:
Originally posted by peter.herlihy
So Both actually acheive teh same result now..although I coulnn't explain why mine does!
Well then, I'll take a crack at explaining your solution to you.

Inside single quotes, what you see is what you get. No character has any special meaning inside single quotes. So variables won't expand. A string like:
'$a'
will just be $a. The shell will not try to substitute the value of a variable called a. So in the line:
sed '$a\
we get exactly what we ask for. Inside single quotes, even the backslash is just another character. (And, btw, this means that there is no way to get a single quote inside single quotes...so 'you can't do that' won't work and there is no way to fix it with backslashes.)

When you want to use a variable inside single quotes, it won't work:
'something $var something'
isn't going to do it. So we must break that single quoted string into two single quoted string and put the variable between them:
'something '$var' something'
is actually good enough, but most folks will add {} whenever a variable touches non-blanks, not just other letters:
'something '${var}' something'

And finally, if the value of var has a string of blanks, we would need to protect them, so we would need single quotes around the variable:
'something '"${var}"' something'
And this get us to the syntax that you used. Your first single quoted string started on one line and finished on the next but otherwise it's pretty much what we have here.

Previous Thread | Next Thread
Test Your Knowledge in Computers #217
Difficulty: Medium
Network operating systems can be embedded in a router or hardware firewall that operates the functions in the physical layer (layer 1).
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Insert date/time header at top of file

I'm trying to take mrt output and put it at the top of a file along with the date and time. I was able to do it at the bottom of the file with the following printf "********** $(date) **********\n\n" >> $OUTPUT_PATH/$HOSTNAME mtr -r -w -c 10 $HOSTADDRESS >> $OUTPUT_PATH/$HOSTNAME printf... (2 Replies)
Discussion started by: kramer65
2 Replies

2. Shell Programming and Scripting

How do I insert text with sed ?

Hi I was wondering if anyone new of a solution to this problem? I need to copy a time stamp that is on a line of .text in a text file into multiple positions on the same line. I need to insert the time stamp on the same line between every occurance of the text ".pdf_.html" right after the... (9 Replies)
Discussion started by: Paul Walker
9 Replies

3. UNIX for Advanced & Expert Users

Insert string in binary file at top

How can i append a EBCDIC string of 100 bytes to 0th position of a binary file in UNIX. (4 Replies)
Discussion started by: param_it
4 Replies

4. Shell Programming and Scripting

Using sed to insert text file at first line

sed '1r file.txt' <source.txt >desti.txt This example will insert 'file.txt' between line 1 and 2 of source.txt. sed '0r file.txt' <source.txt >desti.txt gives an error message. Does anyone know how 'sed' can insert 'file.txt' before the first line of source.txt? (18 Replies)
Discussion started by: psve
18 Replies

5. Shell Programming and Scripting

Sed insert text at first line of empty file

I can't seem to get sed to allow me to insert text in the first line of an empty file. I have a file.txt that is a 0 byte file. I want sed to insert " fooBar" onto the first line. I've tried a few options and nothing seems to work. They work just fine if there's text in the file tho. Help? (4 Replies)
Discussion started by: DC Slick
4 Replies

6. Shell Programming and Scripting

Insert text file only after the first match with SED

Hello, I'm new in Shell scripting but i should write a script, which inserts the license header out of a txt-File into the files in our Projekt. For the Java classes it runs without Problems but for XML files not. At xml-files i have to put the license Header after the xml-Header (?xml... (1 Reply)
Discussion started by: PhoenixONE
1 Replies

7. Shell Programming and Scripting

best way to insert a line at the top of a file?

say I want to insert "this is a test" as the first line into file A, besides echo "this is a test" > /tmp/tmpfile cat /tmp/tmpfile fileA >> /tmp/result, is there any simple way I can do it? thanks (7 Replies)
Discussion started by: fedora
7 Replies

8. Shell Programming and Scripting

Need to insert new text and change existing text in a file using SED

Hi all, I need to insert new text and change existing text in a file. For that I used the below line in the command line and got the expected output. sed '$a\ hi... ' shell > shell1 But I face problem when using the same in script. It is throwing the error as, sed: command garbled:... (4 Replies)
Discussion started by: iamgeethuj
4 Replies

9. UNIX for Dummies Questions & Answers

how do I insert argument into TOP of file using vi?

when directing some text into a file can you choose where it goes like the top of the file (which is text aswell) or the middle?? if so how - especially would like to know how to do so in vi (text editor) If i were to enter an argument ($1) into a another argument ($2) would it would be... (6 Replies)
Discussion started by: rprules
6 Replies

10. Shell Programming and Scripting

insert text into top of file

how would you insert text into a existing file using aguments first arguments being the line of text and the second argument being file name (1 Reply)
Discussion started by: jimbob
1 Replies

Featured Tech Videos