[ovs-dev] [PATCH 1/2] acinclude: Add support for grep option.
William Tu
u9012063 at gmail.com
Tue Oct 31 22:36:39 UTC 2017
On Mon, Oct 30, 2017 at 1:04 PM, Ben Pfaff <blp at ovn.org> wrote:
> On Mon, Oct 16, 2017 at 07:26:44AM -0700, William Tu wrote:
>> Allow to pass grep's option to OVS_GREP_IFELSE.
>> One use case is to pass '-w' for exact match.
>>
>> Signed-off-by: William Tu <u9012063 at gmail.com>
>
> POSIX doesn't mention a -w option, and the Autoconf manual says that it
> is not portable in practice. It also says that \b is not portable in
> practice.
>
> Is there another way to accomplish what you want to do? For example,
> how about HAVE_SKB_GSO_UDP[^_]? Since this is Autoconf, probably it's
> necessary to double the [], as: HAVE_SKB_GSO_UDP[[^_]]
>
> (We don't really care that much about portability to everything that
> Autoconf supports, so probably we could really use -w or \b in
> practice.)
>
> This is what the Autoconf manual says:
>
> 'grep'
> Portable scripts can rely on the 'grep' options '-c', '-l', '-n',
> and '-v', but should avoid other options. For example, don't use
> '-w', as Posix does not require it and Irix 6.5.16m's 'grep' does
> not support it. Also, portable scripts should not combine '-c'
> with '-l', as Posix does not allow this.
>
> Some of the options required by Posix are not portable in practice.
> Don't use 'grep -q' to suppress output, because many 'grep'
> implementations (e.g., Solaris) do not support '-q'. Don't use
> 'grep -s' to suppress output either, because Posix says '-s' does
> not suppress output, only some error messages; also, the '-s'
> option of traditional 'grep' behaved like '-q' does in most modern
> implementations. Instead, redirect the standard output and
> standard error (in case the file doesn't exist) of 'grep' to
> '/dev/null'. Check the exit status of 'grep' to determine whether
> it found a match.
>
> The QNX4 implementation fails to count lines with 'grep -c '$'',
> but works with 'grep -c '^''. Other alternatives for counting
> lines are to use 'sed -n '$='' or 'wc -l'.
>
> Some traditional 'grep' implementations do not work on long input
> lines. On AIX the default 'grep' silently truncates long lines on
> the input before matching.
>
> Also, many implementations do not support multiple regexps with
> '-e': they either reject '-e' entirely (e.g., Solaris) or honor
> only the last pattern (e.g., IRIX 6.5 and NeXT). To work around
> these problems, invoke 'AC_PROG_GREP' and then use '$GREP'.
>
> Another possible workaround for the multiple '-e' problem is to
> separate the patterns by newlines, for example:
>
> grep 'foo
> bar' in.txt
>
> except that this fails with traditional 'grep' implementations and
> with OpenBSD 3.8 'grep'.
>
> Traditional 'grep' implementations (e.g., Solaris) do not support
> the '-E' or '-F' options. To work around these problems, invoke
> 'AC_PROG_EGREP' and then use '$EGREP', and similarly for
> 'AC_PROG_FGREP' and '$FGREP'. Even if you are willing to require
> support for Posix 'grep', your script should not use both '-E' and
> '-F', since Posix does not allow this combination.
>
> Portable 'grep' regular expressions should use '\' only to escape
> characters in the string '$()*.0123456789[\^{}'. For example,
> alternation, '\|', is common but Posix does not require its support
> in basic regular expressions, so it should be avoided in portable
> scripts. Solaris and HP-UX 'grep' do not support it. Similarly,
> the following escape sequences should also be avoided: '\<', '\>',
> '\+', '\?', '\`', '\'', '\B', '\b', '\S', '\s', '\W', and '\w'.
>
> Posix does not specify the behavior of 'grep' on binary files. An
> example where this matters is using BSD 'grep' to search text that
> includes embedded ANSI escape sequences for colored output to
> terminals ('\033[m' is the sequence to restore normal output); the
> behavior depends on whether input is seekable:
>
> $ printf 'esc\033[mape\n' > sample
> $ grep . sample
> Binary file sample matches
> $ cat sample | grep .
> escape
Thanks for the feedback. I will submit v2 patch to use
HAVE_SKB_GSO_UDP[[^_]] instead.
William
More information about the dev
mailing list