For 27 years, Bruce Barnett worked at GE’s Global Research Center in upstate New York. He was responsible for finding solutions for business- and military-related problems when no commercial solution existed. Bruce was the primary expert in security and networking for GE’s research facility. His customers were GE’s business divisions, such as Healthcare, NBC, Digital Energy, Oil and Gas. Bruce also developed several security-based solutions for Lockheed Martin.

Bruce has the ability to quickly research existing approaches, devise innovative solutions, master new technology, and rapidly prototype new technology that both demonstrates new capability while creating a solution that is practical. These projects often required interfacing to existing systems, including databases, web servers, etc.

Bruce published 27 papers, and was awarded 14 patents. He taught classes in security. He won 10 management awards from GE and 2 from Lockheed Martin. He has proven skills in communication.

In addition, Bruce was involved in many product risk assessments, and performed technological reviews of technology with security requirements.

Bruce’s first job at GE was a senior system administrator, responsible for more than 1000 Unix workstations, while maintaining hundreds of open-source software packages for the research community. Bruce connected GE to the Internet in 1988, and was promoted to a scientist because of his expertise.

Before Bruce joined GE, he was a senior software engineer for 13 years, working for a small company making circuit board test systems, and was the primary developer of the run-time and user interface software. He also created a 50-workstation network and transitioned the company to Unix-based systems. This experience shaped Bruce’s attitude, which stresses the importance of creating reliable and maintainable software.

14 Responses to About

  1. Your page http://www.grymoire.com/Unix/Awk.html gives several examples which involve parsing the output of an “ls” command. In general, this is not a good idea. See: http://mywiki.wooledge.org/ParsingLs for details.

    [Your examples are pretty useless for any AWK user. Find() can’t be used in the example I give. And yes, you can use perl instead of AWK. But this is an AWK tutorial. – Bruce]

    • Grymoire says:

      I did mention the problem with different versions of ls in http://www.grymoire.com/Unix/Awk.html#uh-24
      And I did suggest a way to handle differences in ls versions.

      Your other suggestions, such as using find, doesn’t work because it does not provide the size, user or group values.

      I could solve this by using perl instead of AWK or ls. But then that’s not too useful in an AWK tutorial.

  2. Simi says:


    Thank you for the great tutorial about using sed, you saved me a lot of time.

    Best regards

  3. Bruce Brown says:

    Hi Bruce,

    Just a quick note to say I like the new color scheme (on your grymoire.com site). Amazing how two-tone yellow and a drop shadow make the site more visually interesting!
    Macintosh Computer Consultant [and Unix guy]

  4. Dear Bruce,

    I have been looking all over for a simple sed command to search for a value in a specific location on a line out of a text file on unix to find the value of ‘E7’ in position 830 and if so print the line.

    I found an example (sed -n “/.\{829\}E7/p” AGET.txt) but get (sed: Function /.\{829\}E7/p cannot be parsed.) when I run it. I have tried many variations with no luck.

    I know it can not be that hard to do and have looked at your sed tutorial along with about 25 others and just can not find the right command.

    Any advice or help would be greatly appreciated.

    Thank You,
    Donald Lively

    • grymoire says:

      sed -nr “/^.{829}E7/p”
      which prints all lines where the 829th character is E, and the 830th character is 7

      You need to use the ^ beginning of line anchor to match exactly at the 829th position.
      You also need extended regular expressions. (the -r option)

  5. When I run the above I get (sed: illegal option — r) and if I remove the r then it does not find anything and just returns to the Unix prompt.


    • grymoire says:

      We resolved the issue by email, for for readers of the blog, I’ll continue.
      Mac OSX has the -E option instead of the -r.
      But if your version of sed doesn’t have extended regular expressions, use awk
      awk ‘substr($0,830,2) == “E7” {print}’

  6. Pete M. says:

    hi – thanks so much for the Awk tutorial, it is exactly what I needed to get a quick start on the language! One quick question, though. In the Associative Array section you mention that no other languages you know of have Associative Arrays. However, aren’t Perl Hashes basically the same thing? Or is there a difference I am missing? Thanks!


    • grymoire says:

      Thanks for the comment. I modified my statement to make it less ambiguous. In the 1980’s, AWK was the first program I learned that had this feature. This was years before perl was written.

  7. I am **slowly** learning how to use Bash and GNU/Linux. I really appreciate your site for the tutorials on grep, sed, and regex. I’m in my 40’s and discovering a passion for programming that I wish I could have discovered 30 years ago rather than now. It would be a shame to lose the information you’ve provided online for free, so I am going to make a donation to the cause. Thank you again. -Scott

  8. le zack says:

    Thank you for your elaborate sed tutorial.

    One question is – at least to me – unsolved:

    dugdiug A-83 zwgdqwi8ud4zg A-t693
    dlhjgdl A-8373 iuh654isd A-3783 u464duhdi C-3873 A-355
    ois B-44 wfwf A-9484

    sed -r ‘s/^.*(A-([0-9]*))+.*$/\2 … ???

    Output should be:
    83 1693
    8373 3783 355

    How do I achieve this? Is there a way to assign dynamically to groups or is this the wrong approach?

    • grymoire says:

      You can try a crude method like

      sed '
      # remove everything except for A-[0-9]
      s/[^A0-9 -]*//g
      # now remove -[0-9]
      s/ -[0-9]*/ /g
      # and bare numbers
      s/ [0-9]*/ /g
      # now strip out A-
      #remove extra spaces
      s/^ *//
      s/ *$//
      s/ */ /g

      The output is
      83 693
      8373 3783 355

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s