Re: Sed and redirection into the same file
"Joshua Bassett" <[email protected]> Fri, 29 Sep 2006 16:21:45 +1000
| Newsgroups | gmane.org.user-groups.mlug.main |
|---|---|
| Message-ID | <[email protected]> |
Thanks guys....perl to the rescue :) Josh. On 9/29/06, Brendon Oliver <[email protected]> wrote: > On Friday 29 September 2006 15:53, Joshua Bassett wrote: > > > It all appears to work fine, but the problem is when redirecting the > > output back into the same file...I end up with empty files! For > > example, the following works fine: > > > > for x in `grep -lr 'foo' app | grep -v "svn"`; do sed 's/foo/bar/' > > <${x} >${x}.new; done > > > > Clearly it's something to do with the <${x} >${x} part. What am I missing > > here? > > You can't do in-place file edits with sed. Stick with what you found to work > and just rename the .new file if it's non-zero in size otherwise delete it. > e.g: > > for x in `grep -lr 'foo' app | grep -v "svn"` > do > sed 's/foo/bar/'<${x} >${x}.new > if [ -s ${x}.new ]; then > mv ${x}.new ${x} > else > rm -f ${x}.new > fi > done > > > otherwise, use a perl one-liner (eg. perl -pie 's/foo/bar/'). Perl's -i > switch will do in-place file edits for you. > > Cheers, > > - brendon. > > -- > No man is useless who has a friend, and if we are loved we are indispensable. > -- Robert Louis Stevenson > > 16:12:22 up 3 days, 6:44, 1 user, load average: 0.31, 0.18, 0.12 > > > _______________________________________________ > Melbourne Linux Users Group (Australia) > MLUG Web Site: http://www.mlug.org.au/ > Edit your settings: http://lists.mlug.org.au >