It depends on what exactly you mean by an intermediate file. If you simply mean that you don't want to manually create a backup copy to work with, then, sure, if available, sed -i or perl -pi will do the job. However, if you must edit a file in place, truly in place, without consuming an inode, you should probably use ed.
To substitute every occurrence of a string in a file:
Note the inode change after each command except ed:
On a related note, if there is no strict in-place requirement, you can have fun with open descriptors:
This works because the unlink system call used by rm will not delete a file's contents if any process has an open file descriptor pointing to it; it will remove the file's entry from its directory, but the data is still available so long as the descriptor is open. In the code above, the subshell holds an open file descriptor on "f" (thanks to the input redirection), so when rm unlinks "f", while the data is no longer reachable via the name "f", it is still available via standard input to all processes created by the subshell. When sed runs, it reads the data formerly known as "f", but since "f" is no longer linked in the directory, redirecting sed's standard output to "f" clobbers nothing. Refer to http://www.opengroup.org/onlinepubs/...ns/unlink.html for more info.
It goes without saying that, while cool, the unlink/open-descriptor trick is vulnerable to system failure. If the system crashes at just the right moment, it's possible for the filesystem to not have any link to any version of the data. But, hey, you only live once, right?
Unless your filesystem has run out of inodes, there is no advantage nor necessity. I was using the inode number to demonstrate that the file's identity (it's inode/serial number) is changed when sed/perl edits it (even if the name, in the end, is unchanged), in case your request strictly required in-place editing. It did not, therefore most of what I said has no relevance to your situation (though it may still be interesting to know ).
I have a file comp.pkglist which mention package version and release . In 'version change' and 'release change' line there are two versions 'old' and 'new' Version Change: --> Release Change: -->
cat comp.pkglist
Package list: nss-util-devel-3.28.4-1.el6_9.x86_64
Version Change: 3.28.4 -->... (1 Reply)
Sorry for the long/weird title but I'm stuck on a problem I have. I have this XML file:
</member>
<member>
<name>TransactionID</name>
<value><string>123456789123456</string></value>
</member>
<member>
<name>Number</name>
... (9 Replies)
Hello,
I have two files: file1 and file2
file1 has the following info:
---
host: "localhost"
port: 3000
reporter_type: "zookeeper"
zk_hosts:
- "localhost:2181"
file2 contains an IP address (1.1.1.1)
What I want to do is replace localhost with 1.1.1.1, so that the... (4 Replies)
I have a file having some text like:
PATH_ABC=/user/myLocation
I have to replace "/user/myLocation" with a session variable say, $REPLACE_PATH,
where $REPLACE_PATH=/user/myReplaceLocation
The following sed command is not working. It is writing PATH_ABC=$REPLACE_PATH in the file
... (2 Replies)
I have a list of names and email addresses.
Sample File -
username=poga--poga@yahoo.com
new-york,US
512834
username=poga123--poga123@hotmail.com
new-jersey,US
0894753
Requirement is to replace the email ids as dummy_username@xyz.com using sed only.
Output File -... (4 Replies)
Can someone tell me how I can do this?
e.g:
a=$(echo -e wert trewt ertert ertert ertert erttert
erterte
rterter
tertertert
ert)
How do i replace the STRING with $a?
I try this:
sed -i 's/STRING/'"$a"'/g' filename.ext
but this don' t work (2 Replies)
Hi
Im trying to do the following:
grep -H Date: out/* | sed 's/':'/ /' | awk '$4 ~ /^/ {print $1}' | while read VARIABLE; do
awk '{print $1,$3,$2}' $VARIABLE | sed (take stdin and replace a string in $VARIABLE)
done
What this is basically doing is finding all files with Date: in... (11 Replies)
Can someone tell me how I can do this?
e.g:
Say file1.txt contains:
today is monday
the 22 of
NOVEMBER
2010
and file2.txt contains:
the
11th
month
of
How do i replace the word NOVEMBER with (5 Replies)
Hi,
i call my shell like:
my_shell "my project name"
my script:
#!/bin/bash -vx
projectname=$1
sed s/'PROJECT_NAME ='/'PROJECT_NAME = '$projectname/ <test_config_doxy >temp
cp temp test_config_doxy
the following error occurres:
sed s/'PROJECT_NAME ... (2 Replies)
I have file 1 with one million rows. one of the fields is
"FIRSTNAME" (the string)
I have a second file with about 20 first names.
JUDE
DAVID
HOMER
CANE
ABEL
MARTY
CARL
SONNY
STEVE
BERT
OSCAR
MICKY
JAMES
JOHN
GLENN
DOUG (3 Replies)