On Mon, Dec 11, 2023 at 08:04:06AM +0000, Albretch Mueller wrote:
> On 12/11/23, Greg Wooledge <greg@wooledge.org> wrote:
> > Please tell us ...
>
> OK, here is what I did as a t-table
[...]
Your style is confusing, to say the least. Why not play with minimal
examples and work your way up from that?
> the two strings are not the same length even though your are just
> replacing ASCII characters, why did:
> echo "${ftype}" | tr --complement --squeeze-repeats '[A-Za-z0-9.]' '_'
> place a character at the end?
Two things stick out:
1. with --squeeze-repeats you are challenging tr to output less
characters than the input has:
trotzki:~$ echo -n "this is a # string ###" | tr -cs 'a-z' '_'
=> this_is_a_string_
(I allowed myself to simplify things a bit) See? tr is squeezing
repeats (repeated matches), the space-plus-three-hashes at the
end gets squeezed to just one _, thus changing the length.
If your strings contain more than one non-alphanumeric (something
I don't feel like even trying a guess at), this is bound to happen.
You ordered it.
2. This is tr, not regexp, so '[A-Za-z0-9.]' isn't doing what you
think it does. It will match '[', 'A' to 'Z', 'a' to 'z','.' and
']'. I guess you want to say 'A-Za-z0-9.'
3. As a convenience, tr has char classes. Perhaps [:alnum:] is for
you. No idea whether this is a GNU extension
4. In case of doubt, read the man page :)
Cheers
--
t
Attachment:
signature.asc
Description: PGP signature