BSD awk bug ?
Ngie Cooper (yaneurabeya)
yaneurabeya at gmail.com
Wed Aug 16 06:28:53 UTC 2017
> On Aug 15, 2017, at 20:15, KIRIYAMA Kazuhiko <kiri at kx.openedu.org> wrote:
>
> At Wed, 16 Aug 2017 10:36:36 +0900,
> Tomoya Tabuchi wrote:
>>
>> On Wed, Aug 16, 2017 at 10:14:46AM +0900, KIRIYAMA Kazuhiko wrote:
>>> admin at tbedfpc:~/tmp % ll
>>> total 12
>>> -rw-r--r-- 1 admin admin 235 Aug 16 10:01 regex-1.sh
>>> -rw-r--r-- 1 admin admin 236 Aug 16 10:01 regex-2.sh
>>> -rw-r--r-- 1 admin admin 260 Aug 16 10:01 regex.sh
>>> admin at tbedfpc:~/tmp % cat regex.sh
>>> #!/bin/sh
>>>
>>> data='1 2 3 4 5 6
>>> 1 2 3 4 5
>>> 1 2 3 4 5 6
>>> 1 2 3 4 5 6
>>> 1 2 3 4
>>> 1 2 3'
>>>
>>> IFS=$'\n'
>>> for datum in $data; do
>>> if echo "$datum" | egrep -q '^([^[:space:]]+[[:space:]]+){5}'; then
>>> echo "$datum"
>>> else
>>> echo "Not 6 components! : \"$datum\""
>>> fi
>>> done
>>> admin at tbedfpc:~/tmp % sh ./regex.sh
>>> 1 2 3 4 5 6
>>> Not 6 components! : "1 2 3 4 5"
>>> 1 2 3 4 5 6
>>> 1 2 3 4 5 6
>>> Not 6 components! : "1 2 3 4"
>>> Not 6 components! : "1 2 3"
>>> admin at tbedfpc:~/tmp % cat regex-1.sh
>>> #!/bin/sh
>>>
>>> _f_awk='
>>> {
>>> if ($0 ~ /^([^[:space:]]+[[:space:]]+){5}/) {
>>> print $0
>>> } else {
>>> print "Not 6 components! : \"" $0 "\""
>>> }
>>> }'
>>>
>>> data='1 2 3 4 5 6
>>> 1 2 3 4 5
>>> 1 2 3 4 5 6
>>> 1 2 3 4 5 6
>>> 1 2 3 4
>>> 1 2 3'
>>>
>>> echo "$data" | awk "$_f_awk"
>>> admin at tbedfpc:~/tmp % sh ./regex-1.sh
>>> Not 6 components! : "1 2 3 4 5 6"
>>> Not 6 components! : "1 2 3 4 5"
>>> Not 6 components! : "1 2 3 4 5 6"
>>> Not 6 components! : "1 2 3 4 5 6"
>>> Not 6 components! : "1 2 3 4"
>>> Not 6 components! : "1 2 3"
>>> admin at tbedfpc:~/tmp % cat regex-2.sh
>>> #!/bin/sh
>>>
>>> _f_awk='
>>> {
>>> if ($0 ~ /^([^[:space:]]+[[:space:]]+){5}/) {
>>> print $0
>>> } else {
>>> print "Not 6 components! : \"" $0 "\""
>>> }
>>> }'
>>>
>>> data='1 2 3 4 5 6
>>> 1 2 3 4 5
>>> 1 2 3 4 5 6
>>> 1 2 3 4 5 6
>>> 1 2 3 4
>>> 1 2 3'
>>>
>>> echo "$data" | gawk "$_f_awk"
>>> admin at tbedfpc:~/tmp % sh ./regex-2.sh
>>> 1 2 3 4 5 6
>>> Not 6 components! : "1 2 3 4 5"
>>> 1 2 3 4 5 6
>>> 1 2 3 4 5 6
>>> Not 6 components! : "1 2 3 4"
>>> Not 6 components! : "1 2 3"
>>> admin at tbedfpc:~/tmp % uname -a
>>> FreeBSD tbedfpc 12.0-CURRENT FreeBSD 12.0-CURRENT #0 r321597: Thu Jul 27 12:30:57 UTC 2017 root at tbedfc:/usr/obj/usr/src/sys/GENERIC amd64
>>> admin at tbedfpc:~/tmp % pkg info -aI|grep gawk
>>> gawk-4.1.4_1 GNU version of Awk
>>> admin at tbedfpc:~/tmp %
>>>
>>>
>>> Is this the BSD awk (/usr/bin/awk) bug ?
>>
>> Hello Kiriyama-san,
>>
>> The man page awk(1) says that {m,n} matcning is not supported. The "{5}"
>> part matches the literal sequence of characters it's made out of, I suppose.
>
> Oops. I missed "STANDARDS" section. Thanks for pointed out.
>
> # But as it says in front "awk supports extended regular
> # expressions (EREs). See re_format(7) for more information
> # on regular expressions.", I'd like to coinside with
> # re_format(7) spec.
Hello Kiriyama-san,
I asked this same question a while back and was told that the {n} form didn’t work with nawk. I’ll have to dig up the exact post if it’s somewhere public.
Cheers,
-Ngie
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 842 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.freebsd.org/pipermail/freebsd-current/attachments/20170815/c260b800/attachment.sig>
More information about the freebsd-current
mailing list