| 1 | GNU sed NEWS -*- outline -*-
|
|---|
| 2 |
|
|---|
| 3 | * Noteworthy changes in release 4.9 (2022-11-06) [stable]
|
|---|
| 4 |
|
|---|
| 5 | ** Bug fixes
|
|---|
| 6 |
|
|---|
| 7 | 'sed --follow-symlinks -i' no longer loops forever when its operand
|
|---|
| 8 | is a symbolic link cycle.
|
|---|
| 9 | [bug introduced in sed 4.2]
|
|---|
| 10 |
|
|---|
| 11 | a program with an execution line longer than 2GB can no longer trigger
|
|---|
| 12 | an out-of-bounds memory write.
|
|---|
| 13 |
|
|---|
| 14 | using the R command to read an input line of length longer than 2GB
|
|---|
| 15 | can no longer trigger an out-of-bounds memory read.
|
|---|
| 16 |
|
|---|
| 17 | In locales using UTF-8 encoding, the regular expression '.' no
|
|---|
| 18 | longer sometimes fails to match Unicode characters U+D400 through
|
|---|
| 19 | U+D7FF (some Hangul Syllables, and Hangul Jamo Extended-B) and
|
|---|
| 20 | Unicode characters U+108000 through U+10FFFF (half of Supplemental
|
|---|
| 21 | Private Use Area plane B).
|
|---|
| 22 | [bug introduced in sed 4.8]
|
|---|
| 23 |
|
|---|
| 24 | I/O errors involving temp files no longer confuse sed into using a
|
|---|
| 25 | FILE * pointer after fclosing it, which has undefined behavior in C.
|
|---|
| 26 |
|
|---|
| 27 | ** New Features
|
|---|
| 28 |
|
|---|
| 29 | The 'r' command now accepts address 0, allowing inserting a file before
|
|---|
| 30 | the first line.
|
|---|
| 31 |
|
|---|
| 32 | ** Changes in behavior
|
|---|
| 33 |
|
|---|
| 34 | Sed now prints the less-surprising variant in a corner case of
|
|---|
| 35 | POSIX-unspecified behavior. Before, this would print "n".
|
|---|
| 36 | Now, it prints "X":
|
|---|
| 37 |
|
|---|
| 38 | printf n | sed 'sn\nnXn'; echo
|
|---|
| 39 |
|
|---|
| 40 |
|
|---|
| 41 | * Noteworthy changes in release 4.8 (2020-01-14) [stable]
|
|---|
| 42 |
|
|---|
| 43 | ** Bug fixes
|
|---|
| 44 |
|
|---|
| 45 | "sed -i" now creates temporary files with correct umask (limited to u=rwx).
|
|---|
| 46 | Previously sed would incorrectly set umask on temporary files, resulting
|
|---|
| 47 | in problems under certain fuse-like file systems.
|
|---|
| 48 | [bug introduced in sed 4.2.1]
|
|---|
| 49 |
|
|---|
| 50 | ** Release
|
|---|
| 51 |
|
|---|
| 52 | distribute gzip-compressed tarballs once again
|
|---|
| 53 |
|
|---|
| 54 | ** Improvements
|
|---|
| 55 |
|
|---|
| 56 | a year's worth of gnulib development, including improved DFA performance
|
|---|
| 57 |
|
|---|
| 58 |
|
|---|
| 59 | * Noteworthy changes in release 4.7 (2018-12-20) [stable]
|
|---|
| 60 |
|
|---|
| 61 | ** Bug fixes
|
|---|
| 62 |
|
|---|
| 63 | Some uses of \b in the C locale and with the DFA matcher would fail, e.g.,
|
|---|
| 64 | the following would mistakenly print "123-x" instead of "123":
|
|---|
| 65 | echo 123-x|LC_ALL=C sed 's/.\bx//'
|
|---|
| 66 | Using a multibyte locale or certain regexp constructs (some ranges,
|
|---|
| 67 | backreferences) would avoid the bug. [bug introduced in sed 4.6]
|
|---|
| 68 |
|
|---|
| 69 |
|
|---|
| 70 | * Noteworthy changes in release 4.6 (2018-12-19) [stable]
|
|---|
| 71 |
|
|---|
| 72 | ** Improvements
|
|---|
| 73 |
|
|---|
| 74 | sed now prints a clear error message when r/R/w/W (and s///w) commands
|
|---|
| 75 | are missing a filename. Previously, w/W commands would fail with confusing
|
|---|
| 76 | error message, while r/R would be a silent no-op.
|
|---|
| 77 |
|
|---|
| 78 | sed now uses fully-buffered output (instead of line-buffered) when
|
|---|
| 79 | writing to files. This should noticeably improve performance of "sed -i"
|
|---|
| 80 | and other write commands.
|
|---|
| 81 | Buffering can be disabled (as before) with "sed -u".
|
|---|
| 82 |
|
|---|
| 83 | sed in non-cygwin windows environments (e.g. mingw) now properly handles
|
|---|
| 84 | '\n' newlines in -b/--binary mode.
|
|---|
| 85 |
|
|---|
| 86 | ** Bug fixes
|
|---|
| 87 |
|
|---|
| 88 | sed no longer accesses invalid memory (heap overflow) when given invalid
|
|---|
| 89 | backreferences in 's' command [bug#32082, present at least since sed-4.0.6].
|
|---|
| 90 |
|
|---|
| 91 | sed no longer adds extraneous NUL when given s/$//n command.
|
|---|
| 92 | [related to bug#32271, present since sed-4.0.7]
|
|---|
| 93 |
|
|---|
| 94 | sed no longer accesses invalid memory (heap overflow) with s/$//n regexes.
|
|---|
| 95 | [bug#32271, present since sed-4.3].
|
|---|
| 96 |
|
|---|
| 97 | ** New Features
|
|---|
| 98 |
|
|---|
| 99 | New option, --debug: print the input sed script in canonical form
|
|---|
| 100 | and annotate program execution.
|
|---|
| 101 |
|
|---|
| 102 |
|
|---|
| 103 | * Noteworthy changes in release 4.5 (2018-03-31) [stable]
|
|---|
| 104 |
|
|---|
| 105 | ** Bug fixes
|
|---|
| 106 |
|
|---|
| 107 | sed now fails when matching very long input lines (>2GB).
|
|---|
| 108 | Before, sed would silently ignore the regex without indicating an
|
|---|
| 109 | error. [Bug present at least since sed-3.02]
|
|---|
| 110 |
|
|---|
| 111 | sed no longer rejects comments and closing braces after y/// commands.
|
|---|
| 112 | [Bug existed at least since sed-3.02]
|
|---|
| 113 |
|
|---|
| 114 | sed -E --posix no longer ignores special meaning of '+','?','|' .
|
|---|
| 115 | [Bug introduced in the original implementation of --posix option in
|
|---|
| 116 | v4.1a-5-gba68fb4]
|
|---|
| 117 |
|
|---|
| 118 | sed -i now creates selinux context based on the context of the symlink
|
|---|
| 119 | instead of the symlink target. [Bug present since at least sed-4.2]
|
|---|
| 120 | sed -i --follow-symlinks remains unchanged.
|
|---|
| 121 |
|
|---|
| 122 | sed now treats the sequence '\x5c' (ASCII 92, backslash) as literal
|
|---|
| 123 | backslash character, not as an escape prefix character.
|
|---|
| 124 | [Bug present since sed-3.02.80]
|
|---|
| 125 | Old behavior:
|
|---|
| 126 | $ echo z | sed -E 's/(z)/\x5c1/' # identical to 's/(z)/\1/'
|
|---|
| 127 | z
|
|---|
| 128 | New behavior:
|
|---|
| 129 | $ echo z | sed -E 's/(z)/\x5c1/'
|
|---|
| 130 | \1
|
|---|
| 131 |
|
|---|
| 132 |
|
|---|
| 133 | * Noteworthy changes in release 4.4 (2017-02-03) [stable]
|
|---|
| 134 |
|
|---|
| 135 | ** Bug fixes
|
|---|
| 136 |
|
|---|
| 137 | sed could segfault when invoked with specific combination of newlines
|
|---|
| 138 | in the input and regex pattern. [Bug introduced in sed-4.3]
|
|---|
| 139 |
|
|---|
| 140 |
|
|---|
| 141 | * Noteworthy changes in release 4.3 (2016-12-30) [stable]
|
|---|
| 142 |
|
|---|
| 143 | ** Improvements
|
|---|
| 144 |
|
|---|
| 145 | sed's regular expression matching is now typically 10x faster
|
|---|
| 146 |
|
|---|
| 147 | sed now uses unlocked-io where available, resulting in faster I/O
|
|---|
| 148 | operations.
|
|---|
| 149 |
|
|---|
| 150 | ** Bug fixes
|
|---|
| 151 |
|
|---|
| 152 | sed no longer mishandles anchors ^/$ in multiline regex (s///mg)
|
|---|
| 153 | with -z option (NUL terminated lines). [Bug introduced in sed-4.2.2
|
|---|
| 154 | with the initial implementation of -z]
|
|---|
| 155 |
|
|---|
| 156 | sed no longer accepts a ":" command without a label; before, it would
|
|---|
| 157 | treat that as defining a label whose name is empty, and subsequent
|
|---|
| 158 | label-free "t" and "b" commands would use that label. Now, sed emits
|
|---|
| 159 | a diagnostic and fails for that invalid construct.
|
|---|
| 160 |
|
|---|
| 161 | sed no longer accesses uninitialized memory when processing certain
|
|---|
| 162 | invalid multibyte sequences. Demonstrate with this:
|
|---|
| 163 | echo a | LC_ALL=ja_JP.eucJP valgrind sed/sed 's/a/b\U\xb2c/'
|
|---|
| 164 | The error appears to have been introduced with the sed-4.0a release.
|
|---|
| 165 |
|
|---|
| 166 | The 'y' (transliterate) operator once again works with a NUL byte
|
|---|
| 167 | on the RHS. E.g., sed 'y/b/\x00/' now works like tr b '\0'. GNU sed
|
|---|
| 168 | has never before recognized \x00 in this context. However, sed-3.02
|
|---|
| 169 | and prior did accept a literal NUL byte in the RHS, which was possible
|
|---|
| 170 | only when reading a script from a file. For example, this:
|
|---|
| 171 | echo abc|sed -f <(printf 'y/b/\x00/\n')|cat -A
|
|---|
| 172 | is what stopped working. [bug introduced some time after sed-3.02 and
|
|---|
| 173 | prior to the first sed-4* test release]
|
|---|
| 174 |
|
|---|
| 175 | When the closed-above line number ranges of N editing commands
|
|---|
| 176 | overlap (N>1), sed would apply commands 2..N to the line just
|
|---|
| 177 | beyond the largest range endpoint.
|
|---|
| 178 | [bug introduced some time after sed-4.09 and prior to release in sed-4.1]
|
|---|
| 179 | Before, this command would mistakenly modify line 5:
|
|---|
| 180 | $ seq 6|sed '2,4d;2,3s/^/x/;3,4s/^/y/'
|
|---|
| 181 | 1
|
|---|
| 182 | yx5
|
|---|
| 183 | 6
|
|---|
| 184 | Now, it does not:
|
|---|
| 185 | $ seq 6|sed '2,4d;2,3s/^/x/;3,4s/^/y/'
|
|---|
| 186 | 1
|
|---|
| 187 | 5
|
|---|
| 188 | 6
|
|---|
| 189 |
|
|---|
| 190 | An erroneous sed invocation like "echo > F; sed -i s//b/ F" no longer
|
|---|
| 191 | leaves behind a temporary file. Before, that command would create a file
|
|---|
| 192 | alongside F with a name matching /^sed......$/ and fail to remove it.
|
|---|
| 193 |
|
|---|
| 194 | sed --follow-symlinks now works again for stdin.
|
|---|
| 195 | [bug introduced in sed-4.2.2]
|
|---|
| 196 |
|
|---|
| 197 | sed no longer elides invalid bytes in a substitution RHS.
|
|---|
| 198 | Now, sed copies such bytes into the output, just as Perl does.
|
|---|
| 199 | [bug introduced in sed-4.1 -- it was also present prior to 4.0.6]
|
|---|
| 200 |
|
|---|
| 201 | sed no longer prints extraneous character when a backslash follows \c.
|
|---|
| 202 | '\c\\' generates control character ^\ (ASCII 0x1C).
|
|---|
| 203 | Other characters after the second backslash are rejected (e.g. '\c\d').
|
|---|
| 204 | [bug introduced in the sed-4.0.* releases]
|
|---|
| 205 |
|
|---|
| 206 | sed no longer mishandles incomplete multibyte sequences in s,y commands
|
|---|
| 207 | and valid multibyte SHIFT-JIS characters in character classes.
|
|---|
| 208 | Previously, the following commands would fail:
|
|---|
| 209 | LC_ALL=en_US.UTF-8 sed $'s/\316/X/'
|
|---|
| 210 | LC_ALL=ja_JP.shiftjis sed $'/[\203]/]/p'
|
|---|
| 211 | [bug introduced some time after sed-4.1.5 and before sed-4.2.1]
|
|---|
| 212 |
|
|---|
| 213 | ** Feature removal
|
|---|
| 214 |
|
|---|
| 215 | The "L" command (format a paragraph like the fmt(1) command would)
|
|---|
| 216 | has been listed in the documentation as a failed experiment for at
|
|---|
| 217 | least 10 years. That command is now removed.
|
|---|
| 218 |
|
|---|
| 219 | ** Build-related
|
|---|
| 220 |
|
|---|
| 221 | "make dist" now builds .tar.xz files, rather than .tar.gz ones.
|
|---|
| 222 | xz is portable enough and in wide-enough use that distributing
|
|---|
| 223 | only .tar.xz files is enough. It has been fine for coreutils, grep,
|
|---|
| 224 | diffutils and parted for a few years.
|
|---|
| 225 |
|
|---|
| 226 |
|
|---|
| 227 | ** New Features
|
|---|
| 228 |
|
|---|
| 229 | new --sandbox option rejects programs with r/w/e commands.
|
|---|
| 230 |
|
|---|
| 231 |
|
|---|
| 232 | * Noteworthy changes in release 4.2.2 (2012-12-22) [stable]
|
|---|
| 233 |
|
|---|
| 234 | * don't misbehave (truncate input) for lines of length 2^31 and longer
|
|---|
| 235 |
|
|---|
| 236 | * fix endless loop on incomplete multibyte sequences
|
|---|
| 237 |
|
|---|
| 238 | * -u also does unbuffered input, rather than unbuffered output only
|
|---|
| 239 |
|
|---|
| 240 | * New command `F' to print current input file name
|
|---|
| 241 |
|
|---|
| 242 | * sed -i, s///w, and the `w' and `W' commands also obey the --binary option
|
|---|
| 243 | (and create CR/LF-terminated files if the option is absent)
|
|---|
| 244 |
|
|---|
| 245 | * --posix fails for scripts (or fragments as passed to the -e option) that
|
|---|
| 246 | end in a backslash, as they are not portable.
|
|---|
| 247 |
|
|---|
| 248 | * New option -z (--null-data) to separate lines by ASCII NUL characters.
|
|---|
| 249 |
|
|---|
| 250 | * \x26 (and similar escaped sequences) produces a literal & in the
|
|---|
| 251 | replacement argument of the s/// command, rather than including the
|
|---|
| 252 | matched text.
|
|---|
| 253 |
|
|---|
| 254 | ----------------------------------------------------------------------------
|
|---|
| 255 | Sed 4.2.1
|
|---|
| 256 |
|
|---|
| 257 | * fix parsing of s/[[[[[[[[[]//
|
|---|
| 258 |
|
|---|
| 259 | * security contexts are preserved by -i too under SELinux
|
|---|
| 260 |
|
|---|
| 261 | * temporary files for sed -i are not made group/world-readable until
|
|---|
| 262 | they are complete
|
|---|
| 263 |
|
|---|
| 264 | ----------------------------------------------------------------------------
|
|---|
| 265 | Sed 4.2
|
|---|
| 266 |
|
|---|
| 267 | * now released under GPLv3
|
|---|
| 268 |
|
|---|
| 269 | * added a new extension `z` to clear pattern space even in the presence
|
|---|
| 270 | of invalid multibyte sequences
|
|---|
| 271 |
|
|---|
| 272 | * a preexisting GNU gettext installation is needed in order to compile
|
|---|
| 273 | GNU sed with NLS support
|
|---|
| 274 |
|
|---|
| 275 | * new option --follow-symlinks, available when editing a file in-place.
|
|---|
| 276 | This option may not be available on some systems (in this case, the
|
|---|
| 277 | option will *not* be a no-op; it will be completely unavailable).
|
|---|
| 278 | In the future, the option may be added as a no-op on systems without
|
|---|
| 279 | symbolic links at all, since in this case a no-op is effectively
|
|---|
| 280 | indistinguishable from a correct implementation.
|
|---|
| 281 |
|
|---|
| 282 | * hold-space is reset between different files in -i and -s modes.
|
|---|
| 283 |
|
|---|
| 284 | * multibyte processing fixed
|
|---|
| 285 |
|
|---|
| 286 | * the following GNU extensions are turned off by --posix: options [iImMsSxX]
|
|---|
| 287 | in the `s' command, address kinds `FIRST~STEP' and `ADDR1,+N' and `ADDR1,~N',
|
|---|
| 288 | line address 0, `e' or `z' commands, text between an `a' or `c' or `i'
|
|---|
| 289 | command and the following backslash, arguments to the `l' command.
|
|---|
| 290 | --posix disables all extensions to regular expressions.
|
|---|
| 291 |
|
|---|
| 292 | * fixed bug in 'i\' giving a segmentation violation if given alone.
|
|---|
| 293 |
|
|---|
| 294 | * much improved portability
|
|---|
| 295 |
|
|---|
| 296 | * much faster in UTF-8 locales
|
|---|
| 297 |
|
|---|
| 298 | * will correctly replace ACLs when using -i
|
|---|
| 299 |
|
|---|
| 300 | * will now accept NUL bytes for `.'
|
|---|
| 301 |
|
|---|
| 302 | ----------------------------------------------------------------------------
|
|---|
| 303 | Sed 4.1.5
|
|---|
| 304 |
|
|---|
| 305 | * fix parsing of a negative character class not including a closed bracket,
|
|---|
| 306 | like [^]] or [^]a-z].
|
|---|
| 307 |
|
|---|
| 308 | * fix parsing of [ inside an y command, like y/[/A/.
|
|---|
| 309 |
|
|---|
| 310 | * output the result of commands a, r, R when a q command is found.
|
|---|
| 311 |
|
|---|
| 312 | ----------------------------------------------------------------------------
|
|---|
| 313 | Sed 4.1.4
|
|---|
| 314 |
|
|---|
| 315 | * \B correctly means "not on a word boundary" rather than "inside a word"
|
|---|
| 316 |
|
|---|
| 317 | * bugfixes for platform without internationalization
|
|---|
| 318 |
|
|---|
| 319 | * more thorough testing framework for tarballs (`make full-distcheck')
|
|---|
| 320 |
|
|---|
| 321 | ----------------------------------------------------------------------------
|
|---|
| 322 | Sed 4.1.3
|
|---|
| 323 |
|
|---|
| 324 | * regex addresses do not use leftmost-longest matching. In other words,
|
|---|
| 325 | /.\+/ only looks for a single character, and does not try to find as
|
|---|
| 326 | many of them as possible like it used to do.
|
|---|
| 327 |
|
|---|
| 328 | * added a note to BUGS and the manual about changed interpretation
|
|---|
| 329 | of `s|abc\|def||', and about localization issues.
|
|---|
| 330 |
|
|---|
| 331 | * fixed --disable-nls build problems on Solaris.
|
|---|
| 332 |
|
|---|
| 333 | * fixed `make check' in non-English locales.
|
|---|
| 334 |
|
|---|
| 335 | * `make check' tests the regex library by default if the included regex
|
|---|
| 336 | is used (regex tests had to be enabled separately up to now).
|
|---|
| 337 |
|
|---|
| 338 | ----------------------------------------------------------------------------
|
|---|
| 339 | Sed 4.1.2
|
|---|
| 340 |
|
|---|
| 341 | * fix bug in 'y' command in multi-byte character sets
|
|---|
| 342 |
|
|---|
| 343 | * fix severe bug in parsing of ranges with an embedded open bracket
|
|---|
| 344 |
|
|---|
| 345 | * fix off-by-one error when printing a "bad command" error
|
|---|
| 346 |
|
|---|
| 347 | ----------------------------------------------------------------------------
|
|---|
| 348 | Sed 4.1.1
|
|---|
| 349 |
|
|---|
| 350 | * preserve permissions of in-place edited files
|
|---|
| 351 |
|
|---|
| 352 | * yield an error when running -i on terminals or other non regular files
|
|---|
| 353 |
|
|---|
| 354 | * do not interpret - as stdin when using in-place editing mode
|
|---|
| 355 |
|
|---|
| 356 | * fix bug that prevented 's' command modifiers from working
|
|---|
| 357 |
|
|---|
| 358 | ----------------------------------------------------------------------------
|
|---|
| 359 | Sed 4.1
|
|---|
| 360 |
|
|---|
| 361 | * // matches the last regular expression even in POSIXLY_CORRECT mode.
|
|---|
| 362 |
|
|---|
| 363 | * change the way we treat lines which are not terminated by a newline.
|
|---|
| 364 | Such lines are printed without the terminating newline (as before)
|
|---|
| 365 | but as soon as more text is sent to the same output stream, the
|
|---|
| 366 | missing newline is printed, so that the two lines don't concatenate.
|
|---|
| 367 | The behavior is now independent from POSIXLY_CORRECT because POSIX
|
|---|
| 368 | actually has undefined behavior in this case, and the new implementation
|
|---|
| 369 | arguably gives the ``least expected surprise''. Thanks to Stepan
|
|---|
| 370 | Kasal for the implementation.
|
|---|
| 371 |
|
|---|
| 372 | * documentation improvements, with updated references to the POSIX.2
|
|---|
| 373 | specification
|
|---|
| 374 |
|
|---|
| 375 | * error messages on I/O errors are better, and -i does not leave temporary
|
|---|
| 376 | files around (e.g. when running ``sed -i'' on a directory).
|
|---|
| 377 |
|
|---|
| 378 | * escapes are accepted in the y command (for example: y/o/\n/ transforms
|
|---|
| 379 | o's into newlines)
|
|---|
| 380 |
|
|---|
| 381 | * -i option tries to set the owner and group to the same as the input file
|
|---|
| 382 |
|
|---|
| 383 | * `L' command is deprecated and will be removed in sed 4.2.
|
|---|
| 384 |
|
|---|
| 385 | * line number addresses are processed differently -- this is supposedly
|
|---|
| 386 | conformant to POSIX and surely more idiot-proof. Line number addresses
|
|---|
| 387 | are not affected by jumping around them: they are activated and
|
|---|
| 388 | deactivated exactly where the script says, while previously
|
|---|
| 389 | 5,8b
|
|---|
| 390 | 1,5d
|
|---|
| 391 | would actually delete lines 1,2,3,4 and 9 (!).
|
|---|
| 392 |
|
|---|
| 393 | * multibyte characters are taken in consideration to compute the
|
|---|
| 394 | operands of s and y, provided you set LC_CTYPE correctly. They are
|
|---|
| 395 | also considered by \l, \L, \u, \U, \E.
|
|---|
| 396 |
|
|---|
| 397 | * [\n] matches either backslash or 'n' when POSIXLY_CORRECT.
|
|---|
| 398 |
|
|---|
| 399 | * new option --posix, disables all GNU extensions. POSIXLY_CORRECT only
|
|---|
| 400 | disables GNU extensions that violate the POSIX standard.
|
|---|
| 401 |
|
|---|
| 402 | * options -h and -V are not supported anymore, use --help and --version.
|
|---|
| 403 |
|
|---|
| 404 | * removed documentation for \s and \S which worked incorrectly
|
|---|
| 405 |
|
|---|
| 406 | * restored correct behavior for \w and \W: match [[:alnum:]_] and
|
|---|
| 407 | [^[:alnum:]_] (they used to match [[:alpha:]_] and [^[:alpha:]_]
|
|---|
| 408 |
|
|---|
| 409 | * the special address 0 can only be used in 0,/RE/ or 0~STEP addresses;
|
|---|
| 410 | other cases give an error (you are hindering portability for no reason
|
|---|
| 411 | if specifying 0,N and you are giving a dead command if specifying 0
|
|---|
| 412 | alone).
|
|---|
| 413 |
|
|---|
| 414 | * when a \ is used to escape the character that would terminate an operand
|
|---|
| 415 | of the s or y commands, the backslash is removed before the regex is
|
|---|
| 416 | compiled. This is left undefined by POSIX; this behavior makes `s+x\+++g'
|
|---|
| 417 | remove occurrences of `x+', consistently with `s/x\///g'. (However, if
|
|---|
| 418 | you enjoy yourself trying `s*x\***g', sed will use the `x*' regex, and you
|
|---|
| 419 | won't be able to pass down `x\*' while using * as the delimiter; ideas on
|
|---|
| 420 | how to simplify the parser in this respect, and/or gain more coherent
|
|---|
| 421 | semantics, are welcome).
|
|---|
| 422 |
|
|---|
| 423 |
|
|---|
| 424 | ----------------------------------------------------------------------------
|
|---|
| 425 | Sed 4.0.9
|
|---|
| 426 |
|
|---|
| 427 | * 0 address behaves correctly in single-file (-i and -s) mode.
|
|---|
| 428 |
|
|---|
| 429 | * documentation improvements.
|
|---|
| 430 |
|
|---|
| 431 | * tested with many hosts and compilers.
|
|---|
| 432 |
|
|---|
| 433 | * updated regex matcher from upstream, with many bugfixes and speedups.
|
|---|
| 434 |
|
|---|
| 435 | * the `N' command's feature that is detailed in the BUGS file was disabled
|
|---|
| 436 | by the first change below in sed 4.0.8. The behavior has now been
|
|---|
| 437 | restored, and is only enabled if POSIXLY_CORRECT behavior is not
|
|---|
| 438 | requested.
|
|---|
| 439 |
|
|---|
| 440 | ----------------------------------------------------------------------------
|
|---|
| 441 | Sed 4.0.8
|
|---|
| 442 |
|
|---|
| 443 | * fix `sed n' printing the last line twice.
|
|---|
| 444 |
|
|---|
| 445 | * fix incorrect error message for invalid character classes.
|
|---|
| 446 |
|
|---|
| 447 | * fix segmentation violation with repeated empty subexpressions.
|
|---|
| 448 |
|
|---|
| 449 | * fix incorrect parsing of ^ after escaped (.
|
|---|
| 450 |
|
|---|
| 451 | * more comprehensive test suite (and with many expected failures...)
|
|---|
| 452 |
|
|---|
| 453 | ----------------------------------------------------------------------------
|
|---|
| 454 | Sed 4.0.7
|
|---|
| 455 |
|
|---|
| 456 | * VPATH builds working on non-glibc machines
|
|---|
| 457 |
|
|---|
| 458 | * fixed bug in s///Np: was printing even if less than N matches were
|
|---|
| 459 | found.
|
|---|
| 460 |
|
|---|
| 461 | * fixed infinite loop on s///N when LHS matched a null string and
|
|---|
| 462 | there were not enough matches in pattern space
|
|---|
| 463 |
|
|---|
| 464 | * behavior of s///N is consistent with s///g when the LHS can match
|
|---|
| 465 | a null string (and the infinite loop did not happen :-)
|
|---|
| 466 |
|
|---|
| 467 | * updated some translations
|
|---|
| 468 |
|
|---|
| 469 | ----------------------------------------------------------------------------
|
|---|
| 470 | Sed 4.0.6
|
|---|
| 471 |
|
|---|
| 472 | * added parameter to `v' for the version of sed that is expected.
|
|---|
| 473 |
|
|---|
| 474 | * configure switch --without-included-regex to use the system regex matcher
|
|---|
| 475 |
|
|---|
| 476 | * fix for -i option under Cygwin
|
|---|
| 477 |
|
|---|
| 478 | ----------------------------------------------------------------------------
|
|---|
| 479 | Sed 4.0.5
|
|---|
| 480 |
|
|---|
| 481 | * portability fixes
|
|---|
| 482 |
|
|---|
| 483 | * improvements to some error messages (e.g. y/abc/defg/ incorrectly said
|
|---|
| 484 | `excess characters after command' instead of `y arguments have different
|
|---|
| 485 | lengths')
|
|---|
| 486 |
|
|---|
| 487 | * `a', `i', `l', `L', `r' accept two addresses except in POSIXLY_CORRECT
|
|---|
| 488 | mode. Only `q' and `Q' do not accept two addresses in standard (GNU) mode.
|
|---|
| 489 |
|
|---|
| 490 | ----------------------------------------------------------------------------
|
|---|
| 491 | Sed 4.0.4
|
|---|
| 492 |
|
|---|
| 493 | * documentation fixes
|
|---|
| 494 |
|
|---|
| 495 | * update regex matcher
|
|---|
| 496 |
|
|---|
| 497 | ----------------------------------------------------------------------------
|
|---|
| 498 | Sed 4.0.3
|
|---|
| 499 |
|
|---|
| 500 | * fix packaging problem (two missing translation catalogs)
|
|---|
| 501 |
|
|---|
| 502 | ----------------------------------------------------------------------------
|
|---|
| 503 | Sed 4.0.2
|
|---|
| 504 |
|
|---|
| 505 | * more translations
|
|---|
| 506 |
|
|---|
| 507 | * fix build problems (vpath builds and bootstrap builds)
|
|---|
| 508 |
|
|---|
| 509 | ----------------------------------------------------------------------------
|
|---|
| 510 | Sed 4.0.1
|
|---|
| 511 |
|
|---|
| 512 | * Remove last vestiges of super-sed
|
|---|
| 513 |
|
|---|
| 514 | * man page automatically built
|
|---|
| 515 |
|
|---|
| 516 | * more translations provided
|
|---|
| 517 |
|
|---|
| 518 | * portability improvements
|
|---|
| 519 |
|
|---|
| 520 | ----------------------------------------------------------------------------
|
|---|
| 521 | Sed 4.0
|
|---|
| 522 |
|
|---|
| 523 | * Update regex matcher
|
|---|
| 524 |
|
|---|
| 525 | ----------------------------------------------------------------------------
|
|---|
| 526 | Sed 3.96
|
|---|
| 527 |
|
|---|
| 528 | * `y' command supports multibyte character sets
|
|---|
| 529 |
|
|---|
| 530 | * Update regex matcher
|
|---|
| 531 |
|
|---|
| 532 | ----------------------------------------------------------------------------
|
|---|
| 533 | Sed 3.95
|
|---|
| 534 |
|
|---|
| 535 | * `R' command reads a single line from a file.
|
|---|
| 536 |
|
|---|
| 537 | * CR-LF pairs are always ignored under Windows, even if (under Cygwin)
|
|---|
| 538 | a disk is mounted as binary.
|
|---|
| 539 |
|
|---|
| 540 | * More attention to errors on stdout
|
|---|
| 541 |
|
|---|
| 542 | * New `W' command to write first line of pattern space to a file
|
|---|
| 543 |
|
|---|
| 544 | * Can customize line wrap width on single `l' commands
|
|---|
| 545 |
|
|---|
| 546 | * `L' command formats and reflows paragraphs like `fmt' does.
|
|---|
| 547 |
|
|---|
| 548 | * The test suite makefiles are better organized (this change is
|
|---|
| 549 | transparent however).
|
|---|
| 550 |
|
|---|
| 551 | * Compiles and bootstraps out-of-the-box under MinGW32 and Cygwin.
|
|---|
| 552 |
|
|---|
| 553 | * Optimizes cases when pattern space is truncated at its start or at
|
|---|
| 554 | its end by `D' or by a substitution command with an empty RHS.
|
|---|
| 555 | For example scripts like this,
|
|---|
| 556 |
|
|---|
| 557 | seq 1 10000 | tr \\n \ | ./sed ':a; s/^[0-9][0-9]* //; ta'
|
|---|
| 558 |
|
|---|
| 559 | whose behavior was quadratic with previous versions of sed, have
|
|---|
| 560 | now linear behavior.
|
|---|
| 561 |
|
|---|
| 562 | * New command `e' to pipe the output of a command into the output
|
|---|
| 563 | of sed.
|
|---|
| 564 |
|
|---|
| 565 | * New option `e' to pass the output of the `s' command through the
|
|---|
| 566 | Bourne shell and get the result into pattern space.
|
|---|
| 567 |
|
|---|
| 568 | * Switched to obstacks in the parser -- less memory-related bugs
|
|---|
| 569 | (there were none AFAIK but you never know) and less memory usage.
|
|---|
| 570 |
|
|---|
| 571 | * New option -i, to support in-place editing a la Perl. Usually one
|
|---|
| 572 | had to use ed or, for more complex tasks, resort to Perl; this is
|
|---|
| 573 | not necessary anymore.
|
|---|
| 574 |
|
|---|
| 575 | * Dumped buffering code. The performance loss is 10%, but it caused
|
|---|
| 576 | bugs in systems with CRLF termination. The current solution is
|
|---|
| 577 | not definitive, though.
|
|---|
| 578 |
|
|---|
| 579 | * Bug fix: Made the behavior of s/A*/x/g (i.e. `s' command with a
|
|---|
| 580 | possibly empty LHS) more consistent:
|
|---|
| 581 |
|
|---|
| 582 | pattern GNU sed 3.x GNU sed 4.x
|
|---|
| 583 | B xBx xBx
|
|---|
| 584 | BC xBxCx xBxCx
|
|---|
| 585 | BAC xBxxCx xBxCx
|
|---|
| 586 | BAAC xBxxCx xBxCx
|
|---|
| 587 |
|
|---|
| 588 | * Bug fix: the // empty regular expressions now refers to the last
|
|---|
| 589 | regular expression that was matched, rather than to the last
|
|---|
| 590 | regular expression that was compiled. This richer behavior seems
|
|---|
| 591 | to be the correct one (albeit neither one is POSIXLY_CORRECT).
|
|---|
| 592 |
|
|---|
| 593 | * Check for invalid backreferences in the RHS of the `s' command
|
|---|
| 594 | (e.g. s/1234/\1/)
|
|---|
| 595 |
|
|---|
| 596 | * Support for \[lLuUE] in the RHS of the `s' command like in Perl.
|
|---|
| 597 |
|
|---|
| 598 | * New regular expression matcher
|
|---|
| 599 |
|
|---|
| 600 | * Bug fix: if a file was redirected to be stdin, sed did not consume
|
|---|
| 601 | it. So
|
|---|
| 602 | (sed d; sed G) < TESTFILE
|
|---|
| 603 |
|
|---|
| 604 | double-spaced TESTFILE, while the equivalent `useless use of cat'
|
|---|
| 605 | cat TESTFILE | (sed d; sed G)
|
|---|
| 606 |
|
|---|
| 607 | printed nothing (which is the correct behavior). A test for this
|
|---|
| 608 | bug was added to the test suite.
|
|---|
| 609 |
|
|---|
| 610 | * The documentation is now much better, with a few examples provided,
|
|---|
| 611 | and a thorough description of regular expressions. The manual often
|
|---|
| 612 | refers to "GNU extensions", but if they are described here they are
|
|---|
| 613 | specific to this version.
|
|---|
| 614 |
|
|---|
| 615 | * Documented command-line option:
|
|---|
| 616 | -r, --regexp-extended
|
|---|
| 617 | Use extended regexps -- e.g. (abc+) instead of \(abc\+\)
|
|---|
| 618 |
|
|---|
| 619 | * Added feature to the `w' command and to the `w' option of the `s'
|
|---|
| 620 | command: if the file name is /dev/stderr, it means the standard
|
|---|
| 621 | error (inspired by awk); and similarly for /dev/stdout. This is
|
|---|
| 622 | disabled if POSIXLY_CORRECT is set.
|
|---|
| 623 |
|
|---|
| 624 | * Added `m' and `M' modifiers to `s' command for multi-line
|
|---|
| 625 | matching (Perl-style); in addresses, only `M' works.
|
|---|
| 626 |
|
|---|
| 627 | * Added `Q' command for `silent quit'; added ability to pass
|
|---|
| 628 | an exit code from a sed script to the caller.
|
|---|
| 629 |
|
|---|
| 630 | * Added `T' command for `branch if failed'.
|
|---|
| 631 |
|
|---|
| 632 | * Added `v' command, which is a do-nothing intended to fail on
|
|---|
| 633 | seds that do not support GNU sed 4.0's extensions.
|
|---|
| 634 |
|
|---|
| 635 | ----------------------------------------------------------------------------
|
|---|
| 636 | Sed 3.02.80
|
|---|
| 637 |
|
|---|
| 638 | * Started new version nomenclature for pre-3.03 releases. (I'm being
|
|---|
| 639 | pessimistic in assuming that .90 won't give me enough breathing room.)
|
|---|
| 640 |
|
|---|
| 641 | * Bug fixes: the regncomp()/regnexec() interfaces proved to be inadequate to
|
|---|
| 642 | properly handle expressions such as "s/\</#/g". Re-abstracted the regex
|
|---|
| 643 | code in the sed/ tree, and now use the re_search_2() interface to the GNU
|
|---|
| 644 | regex routines. This change also fixed a bug where /./ did not match the
|
|---|
| 645 | NUL character. Had the glibc folk fix a bug in lib/regex.c where
|
|---|
| 646 | 's/0*\([0-9][0-9]\)/X\1X/' failed to match on input "002".
|
|---|
| 647 |
|
|---|
| 648 | * Added new command-line options:
|
|---|
| 649 | -u, --unbuffered
|
|---|
| 650 | Do not attempt to read-ahead more than required; do not buffer stdout.
|
|---|
| 651 | -l N, --line-length=N
|
|---|
| 652 | Specify the desired line-wrap length for the `l' command.
|
|---|
| 653 | A length of "0" means "never wrap".
|
|---|
| 654 |
|
|---|
| 655 | * New internationalization translations added: fr ru de it el sk pt_BR sv
|
|---|
| 656 | (plus nl from 3.02a).
|
|---|
| 657 |
|
|---|
| 658 | * The s/// command now understands the following escapes
|
|---|
| 659 | (in both halves):
|
|---|
| 660 | \a an "alert" (BEL)
|
|---|
| 661 | \f a form-feed
|
|---|
| 662 | \n a newline
|
|---|
| 663 | \r a carriage-return
|
|---|
| 664 | \t a horizontal tab
|
|---|
| 665 | \v a vertical tab
|
|---|
| 666 | \oNNN a character with the octal value NNN
|
|---|
| 667 | \dNNN a character with the decimal value NNN
|
|---|
| 668 | \xNN a character with the hexadecimal value NN
|
|---|
| 669 | This behavior is disabled if POSIXLY_CORRECT is set, at least for the
|
|---|
| 670 | time being (until I can be convinced that this behavior does not violate
|
|---|
| 671 | the POSIX standard). (Incidentally, \b (backspace) was omitted because
|
|---|
| 672 | of the conflict with the existing "word boundary" meaning. \ooo octal
|
|---|
| 673 | format was omitted because of the conflict with backreference syntax.)
|
|---|
| 674 |
|
|---|
| 675 | * If POSIXLY_CORRECT is set, the empty RE // now is the null match
|
|---|
| 676 | instead of "repeat the last REmatch". As far as I can tell
|
|---|
| 677 | this behavior is mandated by POSIX, but it would break too many
|
|---|
| 678 | legacy sed scripts to blithely change GNU sed's default behavior.
|
|---|
| 679 |
|
|---|
| 680 | ----------------------------------------------------------------------------
|
|---|
| 681 | Sed 3.02a
|
|---|
| 682 |
|
|---|
| 683 | * Added internationalization support, and an initial (already out of date)
|
|---|
| 684 | set of Dutch message translations (both provided by Erick Branderhorst).
|
|---|
| 685 |
|
|---|
| 686 | * Added support for scripts like:
|
|---|
| 687 | sed -e 1ifoo -e '$abar'
|
|---|
| 688 | (note no need for \ <newline> after a, i, and c commands).
|
|---|
| 689 | Also, conditionally (on NO_INPUT_INDENT) added
|
|---|
| 690 | experimental support for skipping leading whitespace on
|
|---|
| 691 | each {a,i,c} input line.
|
|---|
| 692 |
|
|---|
| 693 | * Added addressing of the form:
|
|---|
| 694 | /foo/,+5 p (print from foo to 5th line following)
|
|---|
| 695 | /foo/,~5 p (print from foo to next line whose line number is a multiple of 5)
|
|---|
| 696 | The first address of these can be any of the previously existing
|
|---|
| 697 | addressing types; the +N and ~N forms are only allowed as the
|
|---|
| 698 | second address of a range.
|
|---|
| 699 |
|
|---|
| 700 | * Added support for pseudo-address "0" as the first address in an
|
|---|
| 701 | address-range, simplifying scripts which happen to match the end
|
|---|
| 702 | address on the first line of input. For example, a script
|
|---|
| 703 | which deletes all lines from the beginning of the file to the
|
|---|
| 704 | first line which contains "foo" is now simply "sed 0,/foo/d",
|
|---|
| 705 | whereas before one had to go through contortions to deal with
|
|---|
| 706 | the possibility that "foo" might appear on the first line of
|
|---|
| 707 | the input.
|
|---|
| 708 |
|
|---|
| 709 | * Made NUL characters in regexps work "correctly" --- i.e., a NUL
|
|---|
| 710 | in a RE matches a NUL; it does not prematurely terminate the RE.
|
|---|
| 711 | (This only works in -f scripts, as the POSIX.1 exec*() interface
|
|---|
| 712 | only passes NUL-terminated strings, and so sed will only be able
|
|---|
| 713 | to see up to the first NUL in any -e scriptlet.)
|
|---|
| 714 |
|
|---|
| 715 | * Wherever a `;' is accepted as a command terminator, also allow a `}'
|
|---|
| 716 | or a `#' to appear. (This allows for less cluttered-looking scripts.)
|
|---|
| 717 |
|
|---|
| 718 | * Lots of internal changes that are only relevant to source junkies
|
|---|
| 719 | and development testing. Some of which might cause imperceptible
|
|---|
| 720 | performance improvements.
|
|---|
| 721 |
|
|---|
| 722 | ----------------------------------------------------------------------------
|
|---|
| 723 | Sed 3.02
|
|---|
| 724 |
|
|---|
| 725 | * Fixed a bug in the parsing of character classes (e.g., /[[:space:]]/).
|
|---|
| 726 | Corrected an omission in djgpp/Makefile.am and an improper dependency
|
|---|
| 727 | in testsuite/Makefile.am.
|
|---|
| 728 |
|
|---|
| 729 | ----------------------------------------------------------------------------
|
|---|
| 730 | Sed 3.01
|
|---|
| 731 |
|
|---|
| 732 | * This version of sed mainly contains bug fixes and portability
|
|---|
| 733 | enhancements, plus performance enhancements related to sed's handling
|
|---|
| 734 | of input files. Due to excess performance penalties, I have reverted
|
|---|
| 735 | (relative to 3.00) to using regex.c instead of the rx package for
|
|---|
| 736 | regular expression handling, at the expense of losing true POSIX.2
|
|---|
| 737 | BRE compatibility. However, performance related to regular expression
|
|---|
| 738 | handling *still* needs a fair bit of work.
|
|---|
| 739 |
|
|---|
| 740 | * One new feature has been added: regular expressions may be followed
|
|---|
| 741 | with an "I" directive ("i" was taken [the "i"nsert command]) to
|
|---|
| 742 | indicate that the regexp should be matched in a case-insensitive
|
|---|
| 743 | manner. Also of note are a new organization to the source code,
|
|---|
| 744 | new documentation, and a new maintainer.
|
|---|
| 745 |
|
|---|
| 746 | ----------------------------------------------------------------------------
|
|---|
| 747 | Sed 3.0
|
|---|
| 748 |
|
|---|
| 749 | * This version of sed passes the new test-suite donated by
|
|---|
| 750 | Jason Molenda.
|
|---|
| 751 |
|
|---|
| 752 | * Overall performance has been improved in the following sense: Sed 3.0
|
|---|
| 753 | is often slightly slower than sed 2.05. On a few scripts, though, sed
|
|---|
| 754 | 2.05 was so slow as to be nearly useless or to use up unreasonable
|
|---|
| 755 | amounts of memory. These problems have been fixed and in such cases,
|
|---|
| 756 | sed 3.0 should have acceptable performance.
|
|---|