make

Brian Cluff brian at snaptek.com
Mon Aug 25 16:25:07 MST 2014


You'll need to add some single quotes to keep the shell from 
interpreting your regex as shell code like this:

grep -E 'error|fail' {make,install,check}.fail

Without the single quotes you are telling the system to cat from your 
set of files and look for lines with the word error and pipe that to a 
program called fail.

I found that I did have to add the -E even thought the man page says 
that in the GNU version of grep the basic and extended regular 
expressions are the same... it appears that is not the case in practice.

Brian Cluff

On 08/25/2014 12:56 PM, Michael Havens wrote:
> I have 3 files, make.fail, install.fail, and check.fail. I want to check
> for two words in those files: error and fail.
>
> would this work?
>
> cat {make,install,check}.fail | grep -i error|fail
>
> I was told to put the 'E' option in to grep. Looking at the man page it
> seems that the E option is only useful if I were greping for something
> that begins with a '{'. AM I misreading the man page?
>
> man quote:
>         GNU grep -E attempts to support traditional usage by assuming
> that { is
>         not   special  if  it  would  be  the  start  of  an  invalid
> interval
>         specification.  For example, the command grep -E '{1' searches
> for  the
>         two-character  string  {1  instead  of  reporting a syntax error
> in the
>         regular expression.  POSIX allows this behavior as  an
> extension,  but
>         portable scripts should avoid it.
>
>
>
> :-)~MIKE~(-:
>
>
> On Mon, Aug 25, 2014 at 12:24 PM, Michael Havens <bmike1 at gmail.com
> <mailto:bmike1 at gmail.com>> wrote:
>
>     you guys are so helpful! Thanks.
>
>     :-)~MIKE~(-:
>
>
>     On Sun, Aug 24, 2014 at 7:40 PM, Jon Kettenhofen <subs at kexsof.com
>     <mailto:subs at kexsof.com>> wrote:
>
>         I like visible proofs, so here's a test I ran:
>         (terminal output was as is shown)
>
>         [jon at localhost ~]$ rm temp
>         [jon at localhost ~]$ echo >>temp
>         [jon at localhost ~]$ echo $?
>         0
>         [jon at localhost ~]$ cat temp
>
>         [jon at localhost ~]$ echo >>temp 2>&1
>         [jon at localhost ~]$ echo $?
>         0
>         [jon at localhost ~]$ cat temp
>
>
>         [jon at localhost ~]$
>
>         as you can see, no errors and the single ">" did not erase the
>         file when used in this manner.  So Mike's script should work as
>         intended
>         at least if there is no stderr output.
>
>         but suppose there was an error? (apologizing for the length of ...)
>
>         [jon at localhost ~]$ echo "echo" >test
>         [jon at localhost ~]$ echo "ls temp2" >>test
>         [jon at localhost ~]$ # test ls of non-existent file
>         [jon at localhost ~]$ ls temp2
>         ls: cannot access temp2: No such file or directory
>         [jon at localhost ~]$ echo $?
>         2
>         [jon at localhost ~]$ # see, we get both an error and stderr message
>         [jon at localhost ~]$ # so
>         [jon at localhost ~]$ mv test test.sh
>         [jon at localhost ~]$ chgmod +x test.sh
>         bash: chgmod: command not found...
>         [jon at localhost ~]$ chmod +x test.sh
>         [jon at localhost ~]$ # i'm not perfect!
>         [jon at localhost ~]$ rm temp
>         [jon at localhost ~]$ ./test.sh >>temp
>         ls: cannot access temp2: No such file or directory
>         [jon at localhost ~]$ echo $?
>         2
>         [jon at localhost ~]$ cat temp
>
>         [jon at localhost ~]$ ./test.sh >>temp 2>&1
>         [jon at localhost ~]$ echo $?
>         2
>         [jon at localhost ~]$ cat temp
>
>
>         ls: cannot access temp2: No such file or directory
>         [jon at localhost ~]$
>
>         as you can see, Mike's script will work as he apparently intended,
>         providing he's using a modern version of bash.
>
>
>
>         On 08/24/2014 09:56 PM, James Mcphee wrote:
>
>             you've said make, append stdout (default file descriptor 1)
>             to file
>             make.fail, assign stderr (default filedescriptor 2) the same
>             filedescriptor as stdout.  So...  If the intent was to have
>             both stderr
>             and stdout append make.fail, then it is correct.
>
>
>             On Sun, Aug 24, 2014 at 6:06 PM, Michael Havens
>             <bmike1 at gmail.com <mailto:bmike1 at gmail.com>
>             <mailto:bmike1 at gmail.com <mailto:bmike1 at gmail.com>>> wrote:
>
>                  what I really need to know is will this:
>
>                      make>>make.fail 2>&1
>
>                  send stderr and stdout to the file 'make.fail' or did I
>             write it
>                  incorrectly?
>
>                  :-)~MIKE~(-:
>
>
>                  On Sun, Aug 24, 2014 at 2:56 PM, Brian Cluff
>             <brian at snaptek.com <mailto:brian at snaptek.com>
>                  <mailto:brian at snaptek.com <mailto:brian at snaptek.com>>>
>             wrote:
>
>                      the > will delete any file that it points at even
>             if the command
>                      doesn't actually output anything.  It will even
>             delete the file
>                      is the command doesn't exist like if you type grep
>             as gerp
>                       >file, file will still be created/overwritten.
>
>                      If you want to make sure that your command doesn't
>             overwrite any
>                      existing files you have to set the noclobber option
>             like:
>                      $ set -o noclobber
>
>                      A good trick to know:
>                      You can use the > to delete the contents of a file
>             without
>                      having to delete and recreate the file by simply
>             doing this:
>                      $ >yourfile
>
>                      Brian Cluff
>
>
>                      On 08/24/2014 02:36 PM, Michael Havens wrote:
>
>                          I have a question about redirections:
>
>                               make>>make.fail 2>&1
>
>                          tells it make and then to send (>) stderr (2)
>             to stdout (1)
>                          and also to
>                          send stdout that way also (&1). finally all of
>             that gets
>                          sent to a file
>                          named make.fail (>>). Isn't '>>' actually
>             'append' whereas
>                          '>' would
>                          work just as well so long as the file didn't
>             already exist?
>                          If the file
>                          did exist would I get an error or would the
>             file be overwritten?
>                          :-)~MIKE~(-:
>
>
>
>             ------------------------------____---------------------
>                          PLUG-discuss mailing list -
>                          PLUG-discuss at lists.phxlinux.____org
>                          <mailto:PLUG-discuss at lists.__phxlinux.org
>             <mailto:PLUG-discuss at lists.phxlinux.org>>
>
>                          To subscribe, unsubscribe, or to change your
>             mail settings:
>             http://lists.phxlinux.org/____mailman/listinfo/plug-discuss
>             <http://lists.phxlinux.org/__mailman/listinfo/plug-discuss>
>
>             <http://lists.phxlinux.org/__mailman/listinfo/plug-discuss
>             <http://lists.phxlinux.org/mailman/listinfo/plug-discuss>>
>
>                      ------------------------------____---------------------
>                      PLUG-discuss mailing list -
>             PLUG-discuss at lists.phxlinux.____org
>                      <mailto:PLUG-discuss at lists.__phxlinux.org
>             <mailto:PLUG-discuss at lists.phxlinux.org>>
>
>                      To subscribe, unsubscribe, or to change your mail
>             settings:
>             http://lists.phxlinux.org/____mailman/listinfo/plug-discuss
>             <http://lists.phxlinux.org/__mailman/listinfo/plug-discuss>
>
>
>             <http://lists.phxlinux.org/__mailman/listinfo/plug-discuss
>             <http://lists.phxlinux.org/mailman/listinfo/plug-discuss>>
>
>
>
>                  ------------------------------__---------------------
>                  PLUG-discuss mailing list -
>             PLUG-discuss at lists.phxlinux.__org
>             <mailto:PLUG-discuss at lists.phxlinux.org>
>                  <mailto:PLUG-discuss at lists.__phxlinux.org
>             <mailto:PLUG-discuss at lists.phxlinux.org>>
>
>                  To subscribe, unsubscribe, or to change your mail settings:
>             http://lists.phxlinux.org/__mailman/listinfo/plug-discuss
>             <http://lists.phxlinux.org/mailman/listinfo/plug-discuss>
>
>
>
>
>             --
>             James McPhee
>             jmcphe at gmail.com <mailto:jmcphe at gmail.com>
>             <mailto:jmcphe at gmail.com <mailto:jmcphe at gmail.com>>
>
>
>
>             ------------------------------__---------------------
>             PLUG-discuss mailing list -
>             PLUG-discuss at lists.phxlinux.__org
>             <mailto:PLUG-discuss at lists.phxlinux.org>
>             To subscribe, unsubscribe, or to change your mail settings:
>             http://lists.phxlinux.org/__mailman/listinfo/plug-discuss
>             <http://lists.phxlinux.org/mailman/listinfo/plug-discuss>
>
>
>         ------------------------------__---------------------
>         PLUG-discuss mailing list - PLUG-discuss at lists.phxlinux.__org
>         <mailto:PLUG-discuss at lists.phxlinux.org>
>         To subscribe, unsubscribe, or to change your mail settings:
>         http://lists.phxlinux.org/__mailman/listinfo/plug-discuss
>         <http://lists.phxlinux.org/mailman/listinfo/plug-discuss>
>
>
>
>
>
> ---------------------------------------------------
> PLUG-discuss mailing list - PLUG-discuss at lists.phxlinux.org
> To subscribe, unsubscribe, or to change your mail settings:
> http://lists.phxlinux.org/mailman/listinfo/plug-discuss
>



More information about the PLUG-discuss mailing list