insert new line in files

Dan Nelson dnelson at allantgroup.com
Fri Feb 6 15:22:06 PST 2009


In the last episode (Feb 06), Adam Vande More said:
> Dan Nelson wrote:
> > In the last episode (Feb 06), Adam Vande More said:
> >   
> >> I want to insert a new line of text at a certain position in certain
> >> files recursively under a directory.  More specifically, I want text
> >> like this:
> >>
> >> include('/usr/home/www/imp-sites/default_inventory.php');
> >>
> >> to be put into file X at line 37 where file X appears in ./subdir1, 
> >> .subdir2 etc. There are many subdirs or I'd just do it by hand.
> >>
> >> I've done stuff like this before with the rpl script and it works well
> >> as long as there aren't any special characters in the strings.  So I
> >> assumed I finally hit the point where I'm forced to learn something
> >> like sed or awk and tried some examples with sed but I can't figure out
> >> what I'm doing wrong.
> >>
> >> I get results like this:
> >>
> >> sed '5i\test' test.txt
> >> sed: 1: "5i\test": extra characters after \ at the end of i command
> >
> > You want:
> >
> > sed -e '5i\
> > test' test.txt
> >
> > i.e. a linebreak after the backslash.
>
> I had actually tried that too:
> 
>  > sed -e '5i\
> ? test' text.txt
> sed: 1: "5i
> test
> ": command i expects \ followed by text

I don't see a backslash in the error message, which means something ate it. 
Are you running this command from something other than the commandline or a
plain sh script?  If you're calling this from another scripting language
(via system() or popen() or something similar), you probably have to double
the backslash so whatever's parsing it out passes one through to sed.

-- 
	Dan Nelson
	dnelson at allantgroup.com


More information about the freebsd-questions mailing list