Looking for quick way of editing a text file
cs at zip.com.au
cs at zip.com.au
Mon Nov 21 00:30:08 UTC 2005
On 21Nov2005 00:19, Dave Mitchell <davem at iabyn.com> wrote:
| On Mon, Nov 21, 2005 at 11:06:02AM +1100, Cameron Simpson wrote:
| > Bsed is a wrapper for sed. It takes pretty well the same arguments as sed,
| > but edits files in place. I frequently use it for batch edits; it's very
| > handy. Example:
| >
| > bsed '4s/that/that/' filename.txt
| >
| > Replace "this" with "that" on line 4. It essentially does all the redirection
| > of the first sed with error handling, temp files and such.
|
| Note that perl can do a similar edit-in-place, eg
|
| perl -ipe 's/this/that/' *.txt
But screws over the file attributes. BTW, you really mean this:
perl -i -pe 's/this/that/' *.txt
But watch:
[~]zoob*> echo hello >foo
[~]zoob*> ls -ldi foo
6210174 -rw-r--r-- 1 cameron cameron 6 Nov 21 11:23 foo
[~]zoob*> perl -i -pe 's/hell/jell/' foo
[~]zoob*> ls -ldi foo
1350276 -rw-r--r-- 1 cameron cameron 6 Nov 21 11:25 foo
See? A new file. Had it had hard links, they would now be broken.
And again:
[~]zoob*1> ls -ldi foo bar
1350272 lrwxrwxrwx 1 cameron cameron 3 Nov 21 11:27 bar -> foo
1350276 -rw-r--r-- 1 cameron cameron 6 Nov 21 11:25 foo
[~]zoob*> perl -i -pe 's/jell/hell/' bar
[~]zoob*> ls -ldi foo bar
1350272 -rw-r--r-- 1 cameron cameron 6 Nov 21 11:28 bar
1350276 -rw-r--r-- 1 cameron cameron 6 Nov 21 11:25 foo
Symlink gone, replaced with a new file! (Same inode, freed by the file
remove).
So, perl-i does damage. For this reason I NEVER use it.
Besides, for many things Perl is
overkill. I tend to use the smallest tool that will succinctly do the
job. So: tr, sed, awk perl/python in that order typically. Or of course
some combination.
Cheers,
--
Cameron Simpson <cs at zip.com.au> DoD#743
http://www.cskk.ezoshosting.com/cs/
I'd climb a mountain for a llama. - _The Shadow_
More information about the fedora-list
mailing list