1 Sed 4.2.1 2 3 * fix parsing of s/[[[[[[[[[]// 4 5 * security contexts are preserved by -i too under SELinux 6 7 * temporary files for sed -i are not made group/world-readable until 8 they are complete 9 10 ---------------------------------------------------------------------------- 11 Sed 4.2 12 13 * now released under GPLv3 14 15 * added a new extension `z` to clear pattern space even in the presence 16 of invalid multibyte sequences 17 18 * a preexisting GNU gettext installation is needed in order to compile 19 GNU sed with NLS support 20 21 * new option --follow-symlinks, available when editing a file in-place. 22 This option may not be available on some systems (in this case, the 23 option will *not* be a no-op; it will be completely unavailable). 24 In the future, the option may be added as a no-op on systems without 25 symbolic links at all, since in this case a no-op is effectively 26 indistinguishable from a correct implementation. 27 28 * hold-space is reset between different files in -i and -s modes. 29 30 * multibyte processing fixed 31 32 * the following GNU extensions are turned off by --posix: options [iImMsSxX] 33 in the `s' command, address kinds `FIRST~STEP' and `ADDR1,+N' and `ADDR1,~N', 34 line address 0, `e' or `z' commands, text between an `a' or `c' or `i' 35 command and the following backslash, arguments to the `l' command. 36 --posix disables all extensions to regular expressions. 37 38 * fixed bug in 'i\' giving a segmentation violation if given alone. 39 40 * much improved portability 41 42 * much faster in UTF-8 locales 43 44 * will correctly replace ACLs when using -i 45 46 * will now accept NUL bytes for `.' 47 48 ---------------------------------------------------------------------------- 49 Sed 4.1.5 50 51 * fix parsing of a negative character class not including a closed bracket, 52 like [^]] or [^]a-z]. 53 54 * fix parsing of [ inside an y command, like y/[/A/. 55 56 * output the result of commands a, r, R when a q command is found. 57 58 ---------------------------------------------------------------------------- 59 Sed 4.1.4 60 61 * \B correctly means "not on a word boundary" rather than "inside a word" 62 63 * bugfixes for platform without internationalization 64 65 * more thorough testing framework for tarballs (`make full-distcheck') 66 67 ---------------------------------------------------------------------------- 68 Sed 4.1.3 69 70 * regex addresses do not use leftmost-longest matching. In other words, 71 /.\+/ only looks for a single character, and does not try to find as 72 many of them as possible like it used to do. 73 74 * added a note to BUGS and the manual about changed interpretation 75 of `s|abc\|def||', and about localization issues. 76 77 * fixed --disable-nls build problems on Solaris. 78 79 * fixed `make check' in non-English locales. 80 81 * `make check' tests the regex library by default if the included regex 82 is used (regex tests had to be enabled separately up to now). 83 84 ---------------------------------------------------------------------------- 85 Sed 4.1.2 86 87 * fix bug in 'y' command in multi-byte character sets 88 89 * fix severe bug in parsing of ranges with an embedded open bracket 90 91 * fix off-by-one error when printing a "bad command" error 92 93 ---------------------------------------------------------------------------- 94 Sed 4.1.1 95 96 * preserve permissions of in-place edited files 97 98 * yield an error when running -i on terminals or other non regular files 99 100 * do not interpret - as stdin when running in in-place editing mode 101 102 * fix bug that prevented 's' command modifiers from working 103 104 ---------------------------------------------------------------------------- 105 Sed 4.1 106 107 * // matches the last regular expression even in POSIXLY_CORRECT mode. 108 109 * change the way we treat lines which are not terminated by a newline. 110 Such lines are printed without the terminating newline (as before) 111 but as soon as more text is sent to the same output stream, the 112 missing newline is printed, so that the two lines don't concatenate. 113 The behavior is now independent from POSIXLY_CORRECT because POSIX 114 actually has undefined behavior in this case, and the new implementation 115 arguably gives the ``least expected surprise''. Thanks to Stepan 116 Kasal for the implementation. 117 118 * documentation improvements, with updated references to the POSIX.2 119 specification 120 121 * error messages on I/O errors are better, and -i does not leave temporary 122 files around (e.g. when running ``sed -i'' on a directory). 123 124 * escapes are accepted in the y command (for example: y/o/\n/ transforms 125 o's into newlines) 126 127 * -i option tries to set the owner and group to the same as the input file 128 129 * `L' command is deprecated and will be removed in sed 4.2. 130 131 * line number addresses are processed differently -- this is supposedly 132 conformant to POSIX and surely more idiot-proof. Line number addresses 133 are not affected by jumping around them: they are activated and 134 deactivated exactly where the script says, while previously 135 5,8b 136 1,5d 137 would actually delete lines 1,2,3,4 and 9 (!). 138 139 * multibyte characters are taken in consideration to compute the 140 operands of s and y, provided you set LC_CTYPE correctly. They are 141 also considered by \l, \L, \u, \U, \E. 142 143 * [\n] matches either backslash or 'n' when POSIXLY_CORRECT. 144 145 * new option --posix, disables all GNU extensions. POSIXLY_CORRECT only 146 disables GNU extensions that violate the POSIX standard. 147 148 * options -h and -V are not supported anymore, use --help and --version. 149 150 * removed documentation for \s and \S which worked incorrectly 151 152 * restored correct behavior for \w and \W: match [[:alnum:]_] and 153 [^[:alnum:]_] (they used to match [[:alpha:]_] and [^[:alpha:]_] 154 155 * the special address 0 can only be used in 0,/RE/ or 0~STEP addresses; 156 other cases give an error (you are hindering portability for no reason 157 if specifying 0,N and you are giving a dead command if specifying 0 158 alone). 159 160 * when a \ is used to escape the character that would terminate an operand 161 of the s or y commands, the backslash is removed before the regex is 162 compiled. This is left undefined by POSIX; this behavior makes `s+x\+++g' 163 remove occurrences of `x+', consistently with `s/x\///g'. (However, if 164 you enjoy yourself trying `s*x\***g', sed will use the `x*' regex, and you 165 won't be able to pass down `x\*' while using * as the delimiter; ideas on 166 how to simplify the parser in this respect, and/or gain more coherent 167 semantics, are welcome). 168 169 170 ---------------------------------------------------------------------------- 171 Sed 4.0.9 172 173 * 0 address behaves correctly in single-file (-i and -s) mode. 174 175 * documentation improvements. 176 177 * tested with many hosts and compilers. 178 179 * updated regex matcher from upstream, with many bugfixes and speedups. 180 181 * the `N' command's feature that is detailed in the BUGS file was disabled 182 by the first change below in sed 4.0.8. The behavior has now been 183 restored, and is only enabled if POSIXLY_CORRECT behavior is not 184 requested. 185 186 ---------------------------------------------------------------------------- 187 Sed 4.0.8 188 189 * fix `sed n' printing the last line twice. 190 191 * fix incorrect error message for invalid character classes. 192 193 * fix segmentation violation with repeated empty subexpressions. 194 195 * fix incorrect parsing of ^ after escaped (. 196 197 * more comprehensive test suite (and with many expected failures...) 198 199 ---------------------------------------------------------------------------- 200 Sed 4.0.7 201 202 * VPATH builds working on non-glibc machines 203 204 * fixed bug in s///Np: was printing even if less than N matches were 205 found. 206 207 * fixed infinite loop on s///N when LHS matched a null string and 208 there were not enough matches in pattern space 209 210 * behavior of s///N is consistent with s///g when the LHS can match 211 a null string (and the infinite loop did not happen :-) 212 213 * updated some translations 214 215 ---------------------------------------------------------------------------- 216 Sed 4.0.6 217 218 * added parameter to `v' for the version of sed that is expected. 219 220 * configure switch --without-included-regex to use the system regex matcher 221 222 * fix for -i option under Cygwin 223 224 ---------------------------------------------------------------------------- 225 Sed 4.0.5 226 227 * portability fixes 228 229 * improvements to some error messages (e.g. y/abc/defg/ incorrectly said 230 `excess characters after command' instead of `y arguments have different 231 lengths') 232 233 * `a', `i', `l', `L', `r' accept two addresses except in POSIXLY_CORRECT 234 mode. Only `q' and `Q' do not accept two addresses in standard (GNU) mode. 235 236 ---------------------------------------------------------------------------- 237 Sed 4.0.4 238 239 * documentation fixes 240 241 * update regex matcher 242 243 ---------------------------------------------------------------------------- 244 Sed 4.0.3 245 246 * fix packaging problem (two missing translation catalogs) 247 248 ---------------------------------------------------------------------------- 249 Sed 4.0.2 250 251 * more translations 252 253 * fix build problems (vpath builds and bootstrap builds) 254 255 ---------------------------------------------------------------------------- 256 Sed 4.0.1 257 258 * Remove last vestiges of super-sed 259 260 * man page automatically built 261 262 * more translations provided 263 264 * portability improvements 265 266 ---------------------------------------------------------------------------- 267 Sed 4.0 268 269 * Update regex matcher 270 271 ---------------------------------------------------------------------------- 272 Sed 3.96 273 274 * `y' command supports multibyte character sets 275 276 * Update regex matcher 277 278 ---------------------------------------------------------------------------- 279 Sed 3.95 280 281 * `R' command reads a single line from a file. 282 283 * CR-LF pairs are always ignored under Windows, even if (under Cygwin) 284 a disk is mounted as binary. 285 286 * More attention to errors on stdout 287 288 * New `W' command to write first line of pattern space to a file 289 290 * Can customize line wrap width on single `l' commands 291 292 * `L' command formats and reflows paragraphs like `fmt' does. 293 294 * The test suite makefiles are better organized (this change is 295 transparent however). 296 297 * Compiles and bootstraps out-of-the-box under MinGW32 and Cygwin. 298 299 * Optimizes cases when pattern space is truncated at its start or at 300 its end by `D' or by a substitution command with an empty RHS. 301 For example scripts like this, 302 303 seq 1 10000 | tr \\n \ | ./sed ':a; s/^[0-9][0-9]* //; ta' 304 305 whose behavior was quadratic with previous versions of sed, have 306 now linear behavior. 307 308 * New command `e' to pipe the output of a command into the output 309 of sed. 310 311 * New option `e' to pass the output of the `s' command through the 312 Bourne shell and get the result into pattern space. 313 314 * Switched to obstacks in the parser -- less memory-related bugs 315 (there were none AFAIK but you never know) and less memory usage. 316 317 * New option -i, to support in-place editing a la Perl. Usually one 318 had to use ed or, for more complex tasks, resort to Perl; this is 319 not necessary anymore. 320 321 * Dumped buffering code. The performance loss is 10%, but it caused 322 bugs in systems with CRLF termination. The current solution is 323 not definitive, though. 324 325 * Bug fix: Made the behavior of s/A*/x/g (i.e. `s' command with a 326 possibly empty LHS) more consistent: 327 328 pattern GNU sed 3.x GNU sed 4.x 329 B xBx xBx 330 BC xBxCx xBxCx 331 BAC xBxxCx xBxCx 332 BAAC xBxxCx xBxCx 333 334 * Bug fix: the // empty regular expressions now refers to the last 335 regular expression that was matched, rather than to the last 336 regular expression that was compiled. This richer behavior seems 337 to be the correct one (albeit neither one is POSIXLY_CORRECT). 338 339 * Check for invalid backreferences in the RHS of the `s' command 340 (e.g. s/1234/\1/) 341 342 * Support for \[lLuUE] in the RHS of the `s' command like in Perl. 343 344 * New regular expression matcher 345 346 * Bug fix: if a file was redirected to be stdin, sed did not consume 347 it. So 348 (sed d; sed G) < TESTFILE 349 350 double-spaced TESTFILE, while the equivalent `useless use of cat' 351 cat TESTFILE | (sed d; sed G) 352 353 printed nothing (which is the correct behavior). A test for this 354 bug was added to the test suite. 355 356 * The documentation is now much better, with a few examples provided, 357 and a thorough description of regular expressions. The manual often 358 refers to "GNU extensions", but if they are described here they are 359 specific to this version. 360 361 * Documented command-line option: 362 -r, --regexp-extended 363 Use extended regexps -- e.g. (abc+) instead of \(abc\+\) 364 365 * Added feature to the `w' command and to the `w' option of the `s' 366 command: if the file name is /dev/stderr, it means the standard 367 error (inspired by awk); and similarly for /dev/stdout. This is 368 disabled if POSIXLY_CORRECT is set. 369 370 * Added `m' and `M' modifiers to `s' command for multi-line 371 matching (Perl-style); in addresses, only `M' works. 372 373 * Added `Q' command for `silent quit'; added ability to pass 374 an exit code from a sed script to the caller. 375 376 * Added `T' command for `branch if failed'. 377 378 * Added `v' command, which is a do-nothing intended to fail on 379 seds that do not support GNU sed 4.0's extensions. 380 381 ---------------------------------------------------------------------------- 382 Sed 3.02.80 383 384 * Started new version nomenclature for pre-3.03 releases. (I'm being 385 pessimistic in assuming that .90 won't give me enough breathing room.) 386 387 * Bug fixes: the regncomp()/regnexec() interfaces proved to be inadequate to 388 properly handle expressions such as "s/\</#/g". Re-abstracted the regex 389 code in the sed/ tree, and now use the re_search_2() interface to the GNU 390 regex routines. This change also fixed a bug where /./ did not match the 391 NUL character. Had the glibc folk fix a bug in lib/regex.c where 392 's/0*\([0-9][0-9]\)/X\1X/' failed to match on input "002". 393 394 * Added new command-line options: 395 -u, --unbuffered 396 Do not attempt to read-ahead more than required; do not buffer stdout. 397 -l N, --line-length=N 398 Specify the desired line-wrap length for the `l' command. 399 A length of "0" means "never wrap". 400 401 * New internationalization translations added: fr ru de it el sk pt_BR sv 402 (plus nl from 3.02a). 403 404 * The s/// command now understands the following escapes 405 (in both halves): 406 \a an "alert" (BEL) 407 \f a form-feed 408 \n a newline 409 \r a carriage-return 410 \t a horizontal tab 411 \v a vertical tab 412 \oNNN a character with the octal value NNN 413 \dNNN a character with the decimal value NNN 414 \xNN a character with the hexadecimal value NN 415 This behavior is disabled if POSIXLY_CORRECT is set, at least for the 416 time being (until I can be convinced that this behavior does not violate 417 the POSIX standard). (Incidentally, \b (backspace) was omitted because 418 of the conflict with the existing "word boundary" meaning. \ooo octal 419 format was omitted because of the conflict with backreference syntax.) 420 421 * If POSIXLY_CORRECT is set, the empty RE // now is the null match 422 instead of "repeat the last REmatch". As far as I can tell 423 this behavior is mandated by POSIX, but it would break too many 424 legacy sed scripts to blithely change GNU sed's default behavior. 425 426 ---------------------------------------------------------------------------- 427 Sed 3.02a 428 429 * Added internationalization support, and an initial (already out of date) 430 set of Dutch message translations (both provided by Erick Branderhorst). 431 432 * Added support for scripts like: 433 sed -e 1ifoo -e '$abar' 434 (note no need for \ <newline> after a, i, and c commands). 435 Also, conditionally (on NO_INPUT_INDENT) added 436 experimental support for skipping leading whitespace on 437 each {a,i,c} input line. 438 439 * Added addressing of the form: 440 /foo/,+5 p (print from foo to 5th line following) 441 /foo/,~5 p (print from foo to next line whose line number is a multiple of 5) 442 The first address of these can be any of the previously existing 443 addressing types; the +N and ~N forms are only allowed as the 444 second address of a range. 445 446 * Added support for pseudo-address "0" as the first address in an 447 address-range, simplifying scripts which happen to match the end 448 address on the first line of input. For example, a script 449 which deletes all lines from the beginning of the file to the 450 first line which contains "foo" is now simply "sed 0,/foo/d", 451 whereas before one had to go through contortions to deal with 452 the possibility that "foo" might appear on the first line of 453 the input. 454 455 * Made NUL characters in regexps work "correctly" --- i.e., a NUL 456 in a RE matches a NUL; it does not prematurely terminate the RE. 457 (This only works in -f scripts, as the POSIX.1 exec*() interface 458 only passes NUL-terminated strings, and so sed will only be able 459 to see up to the first NUL in any -e scriptlet.) 460 461 * Wherever a `;' is accepted as a command terminator, also allow a `}' 462 or a `#' to appear. (This allows for less cluttered-looking scripts.) 463 464 * Lots of internal changes that are only relevant to source junkies 465 and development testing. Some of which might cause imperceptible 466 performance improvements. 467 468 ---------------------------------------------------------------------------- 469 Sed 3.02 470 471 * Fixed a bug in the parsing of character classes (e.g., /[[:space:]]/). 472 Corrected an omission in djgpp/Makefile.am and an improper dependency 473 in testsuite/Makefile.am. 474 475 ---------------------------------------------------------------------------- 476 Sed 3.01 477 478 * This version of sed mainly contains bug fixes and portability 479 enhancements, plus performance enhancements related to sed's handling 480 of input files. Due to excess performance penalties, I have reverted 481 (relative to 3.00) to using regex.c instead of the rx package for 482 regular expression handling, at the expense of losing true POSIX.2 483 BRE compatibility. However, performance related to regular expression 484 handling *still* needs a fair bit of work. 485 486 * One new feature has been added: regular expressions may be followed 487 with an "I" directive ("i" was taken [the "i"nsert command]) to 488 indicate that the regexp should be matched in a case-insensitive 489 manner. Also of note are a new organization to the source code, 490 new documentation, and a new maintainer. 491 492 ---------------------------------------------------------------------------- 493 Sed 3.0 494 495 * This version of sed passes the new test-suite donated by 496 Jason Molenda. 497 498 * Overall performance has been improved in the following sense: Sed 3.0 499 is often slightly slower than sed 2.05. On a few scripts, though, sed 500 2.05 was so slow as to be nearly useless or to use up unreasonable 501 amounts of memory. These problems have been fixed and in such cases, 502 sed 3.0 should have acceptable performance. 503