Date: Mon, 26 Mar 2007 17:51:07 +0400 From: Yar Tikhiy <yar@comp.chem.msu.su> To: hackers@freebsd.org Subject: sed -i Message-ID: <20070326135106.GG60831@comp.chem.msu.su>
next in thread | raw e-mail | index | archive | help
Hi, Recently noticed that our sed(1) differs from its GNU analog in that in -i mode it considers all files as a single sequence of lines while the latter treats each file independently. The in-line mode isn't in POSIX, so it isn't really clear which way is correct. Here is a couple of practical consequences: - our sed won't act on a numeric range of lines in each file, as in: sed -i '' 2,5d *, which may be counter-intuitive. - our sed's line ranges can span file boundaries in -i mode. If the second feature isn't important, I think we should use a separate line space for each file edited in-line, which is usually desired. Comments? P.S. Attached are a test script and outputs from it for our sed and GNU sed as found in a Linux I have access to. -- Yar %%%%% sed.t %%%%% #!/bin/sh files="1 2 3" lines="1 2 3 4 5" makefiles() { for f in $files; do for n in $lines; do echo $n done > $f done } echo "### Test 1 ###" makefiles sed -i.bak 1,3d $files tail $files echo "### Test 2 ###" makefiles sed -i.bak /5/,/2/d $files tail $files %%%%% output using our sed %%%%% ### Test 1 ### ==> 1 <== 4 5 ==> 2 <== 1 2 3 4 5 ==> 3 <== 1 2 3 4 5 ### Test 2 ### ==> 1 <== 1 2 3 4 ==> 2 <== 3 4 ==> 3 <== 3 4 %%%%% output using GNU sed %%%%% ### Test 1 ### ==> 1 <== 4 5 ==> 2 <== 4 5 ==> 3 <== 4 5 ### Test 2 ### ==> 1 <== 1 2 3 4 ==> 2 <== 1 2 3 4 ==> 3 <== 1 2 3 4 %%%%% END %%%%%
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070326135106.GG60831>