GNU bug report logs - #47281
sed: problem with hex replace a literal '$'

Previous Next

Package: sed;

Reported by: Bastian Bittorf <bb <at> npl.de>

Date: Sat, 20 Mar 2021 13:51:01 UTC

Severity: normal

To reply to this bug, email your comments to 47281 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-sed <at> gnu.org:
bug#47281; Package sed. (Sat, 20 Mar 2021 13:51:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Bastian Bittorf <bb <at> npl.de>:
New bug report received and forwarded. Copy sent to bug-sed <at> gnu.org. (Sat, 20 Mar 2021 13:51:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Bastian Bittorf <bb <at> npl.de>
To: bug-sed <at> gnu.org
Subject: sed: problem with hex replace a literal '$'
Date: Sat, 20 Mar 2021 09:56:43 +0000
Dear hard working developers,

when replacing in hex mode, and a '$' = \x24 is at
the end of the search string, it seems to be parsed
as 'end', which was at least not intended by my usage:

e.g.
# echo 'foo $bar$ baz' >testfile

# hexdump -C testfile
00000000  66 6f 6f 20 24 62 61 72  24 20 62 61 7a 0a        |foo $bar$ baz.|
#                     ^^^^^^^^^^^^^^^

# i want to replace '$bar$'
# sed 's/\x24\x62\x61\x72\x24/\x65\x65\x65\x65\x65/' testfile
foo $bar$ baz

(no match/replacement happens)

# now omit the last char '$'
# sed 's/\x24\x62\x61\x72/\x61\x65\x65\x65/' testfile
foo aeee$ baz

# now making the match on char longer:
# sed 's/\x24\x62\x61\x72\x24\x20/\x61\x65\x65\x65\x65\x20/' testfile
foo aeeee baz

# this happends with latest trunk/master:
# bastian <at> ryzen:~/software/sed$ sed/sed --version
sed/sed (GNU sed) 4.8.7-b352-dirty

I stumpled over this behaviour while
replacing real binary data, where randomly
a 0x24 was involved at the end of the match string

Thanks for reading and maybe fixing 8-)

bye, bastian




Information forwarded to bug-sed <at> gnu.org:
bug#47281; Package sed. (Sat, 20 Mar 2021 17:07:02 GMT) Full text and rfc822 format available.

Message #8 received at 47281 <at> debbugs.gnu.org (full text, mbox):

From: Nora Platiel <nplatiel <at> gmx.us>
To: 47281 <at> debbugs.gnu.org
Subject: bug#47281: sed: problem with hex replace a literal '$'
Date: Sat, 20 Mar 2021 18:06:05 +0100
Hello,
the behavior you are describing is documented here:
https://www.gnu.org/software/sed/manual/sed.html#Escaping-Precedence
If you want to produce a basic regular expression given a string to be matched literally, precede any of $*.[\]^ with \
Likewise, if you are using hex escapes (\xHH), precede any of \x24 \x2a \x2e \x5b \x5c \x5d \x5e with \x5c





Information forwarded to bug-sed <at> gnu.org:
bug#47281; Package sed. (Sun, 21 Mar 2021 16:06:02 GMT) Full text and rfc822 format available.

Message #11 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Bastian Bittorf <bb <at> npl.de>
To: bug-sed <at> gnu.org
Cc: nplatiel <at> gmx.us
Subject: bug#47281: sed: problem with hex replace a literal '$'
Date: Sun, 21 Mar 2021 14:53:58 +0000
> Hello,
>
> the behavior you are describing is documented here:
> https://www.gnu.org/software/sed/manual/sed.html#Escaping-Precedence
>
> If you want to produce a basic regular
> expression given a string to be matched 
> literally, precede any of $*.[\]^ with \
> Likewise, if you are using hex escapes (\xHH),
> precede any of \x24 \x2a \x2e \x5b \x5c \x5d \x5e with \x5c

Hi Nora,

thanks for your help suggesting the escaping.

I understand, that this behaviour is valid and not a bug.
Maybe you can post this to the Mailingslist as well,
i'am not subscribed there.

Indeed this is really awkward, but I have to
accept that and use now something like that:

#!/bin/sh
#
# [...]
#
# case "$hex" in
#   24|2a|2e|5b|5c|5d|5e)
#     hex="5c\x$hex"
#   ;;
# esac

see:
https://github.com/bittorf/kritis-linux/commit/d3cc6c84a6c021ae2f7e9351f9f4ef0fc7098c0b

Thanks again & bye,
Bastian Bittorf




This bug report was last modified 3 years and 282 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.