So, I want to, in a script, do an in-line replacement of a line in a file. Piece of cake in Linux with GNU sed. With OSX and BSD sed, not so much. I've been Googling, but nothing is really helping... either an answer is for a use case different enough from what I want to do, or it's something like inserting a newline on the command line, and I need this in a script.
I'm not stuck on sed, but that really should be the right tool to use. I do want to use a tool that comes natively with OS X, so installing GNU sed is a last resort. I'm on Lion, but would like one solution that'll work for 10.5 - 10.8
For simplicity's sake, there's a file with a few lines, one of which starts with "flags". I want to just replace that line.
Inserting a line is rewriting the file from that point, so just sed to a temp file and then cat the temp file content over the original. You can also drive ex, vi's foundation, from a script very like sed but with additional commands.
Really, to actually rewrite just from line 2, not the whole file, you might need a C/PERL routine that overwrites existing positions within the file, extending or shortening it at the end. I suspect most tools truncate and write data from temp files when you save. After all, they are not tolerant of other processes mmap()ing the file or seeking around and reading lower locations that might disappear momentarily. I will tusc a vi and see. Yep, vi close()s, opens with creat() and writes it all. So, back to "use sed with a temp file." If you dislike temp files and the file is smaller than max env size (a meg or so), You can store the file in the env:
I wrote a C tool once that overwrote $1 from stdin without truncating and trimmed the file length at the end if shorter using fcntl(), so I guess PERL can do that, too. But generally, update in place is a fantasy.
Last edited by DGPickett; 10-24-2012 at 03:30 PM..
Location: Saint Paul, MN USA / BSD, CentOS, Debian, OS X, Solaris
Posts: 2,288
Thanks Given: 430
Thanked 480 Times in 395 Posts
Hi.
Quote:
Originally Posted by jnojr
So, I want to, in a script, do an in-line replacement of a line in a file. Piece of cake in Linux with GNU sed. With OSX and BSD sed, not so much. ....
The in-place modification of files usually involves writing a scratch-temporary file and copying the scratch file back over the original (or renaming the file). As noted, not all versions of sed, etc., have this capability builtin.
One general solution is the addition of command sponge, a component of package moreutils. So for system OS, ker|rel, machine: FreeBSD, 8.0-RELEASE, i386:
(The utility mag is a local generic repository scanner, so that we need not recall the details of apt-cache, yum, rpm, zypper, ports, etc.)
I usually just install a personal copy of gnu sed, namng it gsed. The old sed's had line length limits and EOF handling bugs that are aggravating, but often they were faster as the buffer was not so indirect.
Hi all,
Let's say I have a script calling for the two variables PA_VALUE and PB_VALUE.
for pa in PA_VALUE
blah blah
do
for pb in PB_VALUE
blah blah
do
I have a text file with two columns of values for PA and PB.
14.5 16.7
7.8 9.5
5.6 3.6
etc etc
I would like to read this... (7 Replies)
Sed command to replace a line in a file using line number from the output of a pipe.
Is it possible to replace a whole line piped from someother command into a file at paritcular line...
here is some basic execution flow..
the line number is 412
lineNo=412
Now i have a line... (1 Reply)
All, I appreciate any help you can offer here as this is well beyond my grasp of awk/sed...
I have an input file similar to:
&LOG
&LOG Part: "@DB/TC10000021855/--F"
&LOG
&LOG
&LOG Part: "@DB/TC10000021852/--F"
&LOG Cloning_Action: RETAIN
&LOG Part: "@DB/TCCP000010713/--A"
&LOG
&LOG... (5 Replies)
my requirement is,
consider a file output
cat output
blah sdjfhjkd jsdfhjksdh
sdfs 23423 sdfsdf sdf"sdfsdf"sdfsdf"""""dsf
hellow there
this doesnt look good
et cetc etc
etcetera
i want to replace a line of line number 4 ("this doesnt look good") with some other line
... (3 Replies)
Hi How Are you?
I am doing fine!
I need to go now?
I will see you tomorrow!
Basically I need to replace the entire line containing "doing" with a blank line:
I need to the following output:
Hi How Are you?
I need to go now?
I will see you tomorrow!
Thanks in advance.... (1 Reply)
Hello,
I need to use sed to find a certain string and then do a replace on the line above. For example if I had the following text:
AAAAAAA
BBBBBBB
CCCCCCC
DDDDDD
I would like to find CCCCCCC, but I would like the replace to be carried out on BBBBBBB. I have done some... (11 Replies)
i have few lines in a file... i am reading them in a while loop so a particular line is held is $line1.. consider a modified line is held in $line2.... i want to replace $line1 with $line2 in the same file... how to do it..?
i have come up till the below code
sed "s/$line1/$line2/g" tmpfile.sql... (5 Replies)
Hi,
Please help me with the sed command for the following scenario:
I've in abc.txt,
asdasdada<cr>aasdsad<cr><cr>asdasdfsdfs<cr><cr><cr>asdsada<cr>adasd<cr>daasdaasd<cr><cr><cr>
I want a sed command to do
asdasdada<cr>aasdsad<cr>asdasdfsdfs<cr>asdsada<cr>adasd<cr>daasdaasd<cr>
... (13 Replies)
Hi,
I have a problem. I want to use SED to replace one line with three
It looks like:
PARAM='first_line,second_line,third_line'
And in file:
blablabla
blablabla
PARAM
blablabla
blablabla
blablabla
All I want is to change this into:
blablabla
blablabla
first_line
second_line... (6 Replies)
I need to replace the line containing "STAGE_DB" with the line
"STAGE_DB $DB # database that contains the table being loaded ($workingDB)"
Here $DB is passed during the runtime.
How can I do this?
Thanks,
Kousikan (2 Replies)