It looks like there's a bug in FreeBSD's sed(1), grep(1), more specifically re_format(7), regarding accented characters and
Can anyone confirm the unexpected behaviours below?
-- Context
-- Unexpected behaviours in bold:
[^...] as described in re_format(7):
Code:
DESCRIPTION
[...]
A bracket expression is a list of characters enclosed in `[]'. It nor-
mally matches any single character from the list (but see below). If
the list begins with `^', it matches any single character (but see be-
low) not from the rest of the list.
Can anyone confirm the unexpected behaviours below?
-- Context
Rich (BB code):
[100] # uname -a
FreeBSD q210 14.1-RELEASE-p5 FreeBSD 14.1-RELEASE-p5 GENERIC amd64
[101] # pkg which /usr/local/bin/ggrep
/usr/local/bin/ggrep was installed by package gnugrep-3.11
[102] # pkg which /usr/local/bin/gsed
/usr/local/bin/gsed was installed by package gsed-4.9
[103] # locale
LANG=C.UTF-8
LC_CTYPE="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_TIME="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_ALL=
-- Unexpected behaviours in bold:
Rich (BB code):
[1] # echo '9a' | /usr/bin/sed -En 's/([^a])(a)/-\1-\2-/p'
-9-a-
[2] # echo '9a' | /usr/local/bin/gsed -En 's/([^a])(a)/-\1-\2-/p'
-9-a-
[3] # echo '9a' | /usr/bin/grep -E '[^a]a'
9a
[4] # echo '9a' | /usr/local/bin/ggrep -E '[^a]a'
9a
[5] #
[6] # echo '9â' | /usr/bin/sed -En 's/([^â])(â)/-\1-\2-/p'
[7] # echo '9â' | /usr/local/bin/gsed -En 's/([^â])(â)/-\1-\2-/p'
-9-â-
[8] # echo 'ââ' | /usr/bin/sed -En 's/([â])(â)/-\1-\2-/p'
-â-â-
[9] # echo 'ââ' | /usr/local/bin/gsed -En 's/([â])(â)/-\1-\2-/p'
-â-â-
[10] # echo '9â' | /usr/bin/grep -E '[^â]â'
[11] # echo '9â' | /usr/local/bin/ggrep -E '[^â]â'
9â
[12] #
[13] # echo '9ç' | /usr/bin/sed -En 's/([^ç])(ç)/-\1-\2-/p'
[14] # echo '9ç' | /usr/local/bin/gsed -En 's/([^ç])(ç)/-\1-\2-/p'
-9-ç-
[15] # echo 'çç' | /usr/bin/sed -En 's/([ç])(ç)/-\1-\2-/p'
-ç-ç-
[16] # echo 'çç' | /usr/local/bin/gsed -En 's/([ç])(ç)/-\1-\2-/p'
-ç-ç-
[17] # echo '9ç' | /usr/bin/grep -E '[^ç]ç'
[18] # echo '9ç' | /usr/local/bin/ggrep -E '[^ç]ç'
9ç
[19] #
[20] # echo '9é' | /usr/bin/sed -En 's/([^é])(é)/-\1-\2-/p'
[21] # echo '9é' | /usr/local/bin/gsed -En 's/([^é])(é)/-\1-\2-/p'
-9-é-
[22] # echo 'éé' | /usr/bin/sed -En 's/([é])(é)/-\1-\2-/p'
-é-é-
[23] # echo 'éé' | /usr/local/bin/gsed -En 's/([é])(é)/-\1-\2-/p'
-é-é-
[24] # echo '9é' | /usr/bin/grep -E '[^é]é'
[25] # echo '9é' | /usr/local/bin/ggrep -E '[^é]é'
9é