Grep end regex matching Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) 2019 Community Moderator Election Results Why I closed the “Why is Kali so hard” questionSed regex - include original matchingRegex/pattern matching problem to extract dataRegex not matchingWhat is the email matching regex in basic regex for grep?Problems with regex in greppiping grep regex into sed commandgrep regular expression to avoid matching semicolon at endGrep word matchingsed or grep regex problemGrep regex not working

Unable to start mainnet node docker container

What's the difference between (size_t)-1 and ~0?

What are the performance impacts of 'functional' Rust?

Are my PIs rude or am I just being too sensitive?

How do you clear the ApexPages.getMessages() collection in a test?

Active filter with series inductor and resistor - do these exist?

What do you call a plan that's an alternative plan in case your initial plan fails?

Can the prologue be the backstory of your main character?

How does modal jazz use chord progressions?

Blender game recording at the wrong time

Why use gamma over alpha radiation?

What would be Julian Assange's expected punishment, on the current English criminal law?

How to market an anarchic city as a tourism spot to people living in civilized areas?

New Order #5: where Fibonacci and Beatty meet at Wythoff

How to say that you spent the night with someone, you were only sleeping and nothing else?

What was the last x86 CPU that did not have the x87 floating-point unit built in?

What to do with post with dry rot?

Replacing HDD with SSD; what about non-APFS/APFS?

What's the point in a preamp?

Estimated State payment too big --> money back; + 2018 Tax Reform

Cold is to Refrigerator as warm is to?

Autumning in love

Unexpected result with right shift after bitwise negation

What did Darwin mean by 'squib' here?



Grep end regex matching



Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)
2019 Community Moderator Election Results
Why I closed the “Why is Kali so hard” questionSed regex - include original matchingRegex/pattern matching problem to extract dataRegex not matchingWhat is the email matching regex in basic regex for grep?Problems with regex in greppiping grep regex into sed commandgrep regular expression to avoid matching semicolon at endGrep word matchingsed or grep regex problemGrep regex not working



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








0















On OS X, system_profiler SPHardwareDataType outputs:



Hardware Overview:

Model Name: MacBook Pro
Total Number of Cores: 4
L2 Cache (per Core): 256 KB
L3 Cache: 8 MB
Memory: 8 GB


I want to get the Memory value, trimmed of whitespaces.



This is what I had:



system_profiler SPHardwareDataType | grep --color=never -E '^ +Memory: ' | cut -d ':' -f 2


Not ok. It keeps the whitespace.



I switched to this:



system_profiler SPHardwareDataType | perl -ne 'if(/^ +Memory: (.*)$/)print $1;'


and I'd like to ask:



  • Could this be made more concise in Perl?

The braces annoy me, often I type them wrong. Having to put the condition in () is also bothersome. The semicolon is bothersome.



  • Could this be made as concisely using more basic UNIX tools? (grep/sed/awk)?

Note: I do not use this line I like..



system_profiler SPHardwareDataType | sed -Ene 's/^ +Memory: (.*)$/1/g p'


because extended regexes (-E are -r on some platforms? possible?) and fundamentally because, although I understand that sed works on lines, -n suppresses output unless I explicitly p print it, s//g is a normal regex substitute.. and that commands following a match are only executed on matching lines.. I am puzzled by the fact that s//g in reality is an action in itself.. so I would expect p to require a ; before it.. odd that you can both replace and use the match as a condition to execute the comand.. is that line correct at all?










share|improve this question






























    0















    On OS X, system_profiler SPHardwareDataType outputs:



    Hardware Overview:

    Model Name: MacBook Pro
    Total Number of Cores: 4
    L2 Cache (per Core): 256 KB
    L3 Cache: 8 MB
    Memory: 8 GB


    I want to get the Memory value, trimmed of whitespaces.



    This is what I had:



    system_profiler SPHardwareDataType | grep --color=never -E '^ +Memory: ' | cut -d ':' -f 2


    Not ok. It keeps the whitespace.



    I switched to this:



    system_profiler SPHardwareDataType | perl -ne 'if(/^ +Memory: (.*)$/)print $1;'


    and I'd like to ask:



    • Could this be made more concise in Perl?

    The braces annoy me, often I type them wrong. Having to put the condition in () is also bothersome. The semicolon is bothersome.



    • Could this be made as concisely using more basic UNIX tools? (grep/sed/awk)?

    Note: I do not use this line I like..



    system_profiler SPHardwareDataType | sed -Ene 's/^ +Memory: (.*)$/1/g p'


    because extended regexes (-E are -r on some platforms? possible?) and fundamentally because, although I understand that sed works on lines, -n suppresses output unless I explicitly p print it, s//g is a normal regex substitute.. and that commands following a match are only executed on matching lines.. I am puzzled by the fact that s//g in reality is an action in itself.. so I would expect p to require a ; before it.. odd that you can both replace and use the match as a condition to execute the comand.. is that line correct at all?










    share|improve this question


























      0












      0








      0








      On OS X, system_profiler SPHardwareDataType outputs:



      Hardware Overview:

      Model Name: MacBook Pro
      Total Number of Cores: 4
      L2 Cache (per Core): 256 KB
      L3 Cache: 8 MB
      Memory: 8 GB


      I want to get the Memory value, trimmed of whitespaces.



      This is what I had:



      system_profiler SPHardwareDataType | grep --color=never -E '^ +Memory: ' | cut -d ':' -f 2


      Not ok. It keeps the whitespace.



      I switched to this:



      system_profiler SPHardwareDataType | perl -ne 'if(/^ +Memory: (.*)$/)print $1;'


      and I'd like to ask:



      • Could this be made more concise in Perl?

      The braces annoy me, often I type them wrong. Having to put the condition in () is also bothersome. The semicolon is bothersome.



      • Could this be made as concisely using more basic UNIX tools? (grep/sed/awk)?

      Note: I do not use this line I like..



      system_profiler SPHardwareDataType | sed -Ene 's/^ +Memory: (.*)$/1/g p'


      because extended regexes (-E are -r on some platforms? possible?) and fundamentally because, although I understand that sed works on lines, -n suppresses output unless I explicitly p print it, s//g is a normal regex substitute.. and that commands following a match are only executed on matching lines.. I am puzzled by the fact that s//g in reality is an action in itself.. so I would expect p to require a ; before it.. odd that you can both replace and use the match as a condition to execute the comand.. is that line correct at all?










      share|improve this question
















      On OS X, system_profiler SPHardwareDataType outputs:



      Hardware Overview:

      Model Name: MacBook Pro
      Total Number of Cores: 4
      L2 Cache (per Core): 256 KB
      L3 Cache: 8 MB
      Memory: 8 GB


      I want to get the Memory value, trimmed of whitespaces.



      This is what I had:



      system_profiler SPHardwareDataType | grep --color=never -E '^ +Memory: ' | cut -d ':' -f 2


      Not ok. It keeps the whitespace.



      I switched to this:



      system_profiler SPHardwareDataType | perl -ne 'if(/^ +Memory: (.*)$/)print $1;'


      and I'd like to ask:



      • Could this be made more concise in Perl?

      The braces annoy me, often I type them wrong. Having to put the condition in () is also bothersome. The semicolon is bothersome.



      • Could this be made as concisely using more basic UNIX tools? (grep/sed/awk)?

      Note: I do not use this line I like..



      system_profiler SPHardwareDataType | sed -Ene 's/^ +Memory: (.*)$/1/g p'


      because extended regexes (-E are -r on some platforms? possible?) and fundamentally because, although I understand that sed works on lines, -n suppresses output unless I explicitly p print it, s//g is a normal regex substitute.. and that commands following a match are only executed on matching lines.. I am puzzled by the fact that s//g in reality is an action in itself.. so I would expect p to require a ; before it.. odd that you can both replace and use the match as a condition to execute the comand.. is that line correct at all?







      sed grep perl






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited 17 hours ago









      Rui F Ribeiro

      42.1k1483142




      42.1k1483142










      asked Mar 29 '13 at 19:34









      RobottinosinoRobottinosino

      1,87382745




      1,87382745




















          3 Answers
          3






          active

          oldest

          votes


















          1














          Awk would make it most consise:



          system_profiler SPHardwareDataType | awk -F': ' '/Memory:/print $2'





          share|improve this answer

























          • Does not capture the unit of measure, in that case GB, which was desirable.. perhaps a capture "from field 2 to NF"? How would you write that?

            – Robottinosino
            Mar 29 '13 at 19:38











          • Not sure, so I simply edited the answer to use a proper -F parameter :)

            – Dennis Kaarsemaker
            Mar 29 '13 at 19:46












          • This is the best I have found anywhere. The -F to include both the colon and the space trims the rest of the line already, in one go. Very compact, exactly right.. LIKE!

            – Robottinosino
            Mar 29 '13 at 20:11



















          0














          This is all you really need for the Perl one:



          system_profiler SPHardwareDataType | perl -nle '/ry:s*(.*)/ && print $1'


          Some other choices:




          • system_profiler SPHardwareDataType | /bin/grep Me | gawk 'print $2,$3'



            Using /bin/grep eliminates the need for --color=never. grep is defined as an alias to grep --color=auto in /etc/bash.bashrc (at least it is on most Linux distros and, I guess, on OSX).




          • system_profiler SPHardwareDataType | /bin/grep Me | /bin/egrep -o '[1-9]+.+'



            The -o causes grep toprint only the matched characters.



          • system_profiler SPHardwareDataType | tail -n 1 | cut -d ' ' -f 4,5


          • system_profiler SPHardwareDataType | tail -n 1 | sed 's/.*: //g'






          share|improve this answer
































            0














            system_profiler SPHardwareDataType | sed -n 's/^ *Memory: //p'


            p here is a flag to the s command (like g), not the p command, and means print the pattern space if the substitution takes place. You don't need g here, since the pattern can only match once.






            share|improve this answer























              Your Answer








              StackExchange.ready(function()
              var channelOptions =
              tags: "".split(" "),
              id: "106"
              ;
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function()
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled)
              StackExchange.using("snippets", function()
              createEditor();
              );

              else
              createEditor();

              );

              function createEditor()
              StackExchange.prepareEditor(
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: false,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: null,
              bindNavPrevention: true,
              postfix: "",
              imageUploader:
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              ,
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              );



              );













              draft saved

              draft discarded


















              StackExchange.ready(
              function ()
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f70541%2fgrep-end-regex-matching%23new-answer', 'question_page');

              );

              Post as a guest















              Required, but never shown

























              3 Answers
              3






              active

              oldest

              votes








              3 Answers
              3






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              1














              Awk would make it most consise:



              system_profiler SPHardwareDataType | awk -F': ' '/Memory:/print $2'





              share|improve this answer

























              • Does not capture the unit of measure, in that case GB, which was desirable.. perhaps a capture "from field 2 to NF"? How would you write that?

                – Robottinosino
                Mar 29 '13 at 19:38











              • Not sure, so I simply edited the answer to use a proper -F parameter :)

                – Dennis Kaarsemaker
                Mar 29 '13 at 19:46












              • This is the best I have found anywhere. The -F to include both the colon and the space trims the rest of the line already, in one go. Very compact, exactly right.. LIKE!

                – Robottinosino
                Mar 29 '13 at 20:11
















              1














              Awk would make it most consise:



              system_profiler SPHardwareDataType | awk -F': ' '/Memory:/print $2'





              share|improve this answer

























              • Does not capture the unit of measure, in that case GB, which was desirable.. perhaps a capture "from field 2 to NF"? How would you write that?

                – Robottinosino
                Mar 29 '13 at 19:38











              • Not sure, so I simply edited the answer to use a proper -F parameter :)

                – Dennis Kaarsemaker
                Mar 29 '13 at 19:46












              • This is the best I have found anywhere. The -F to include both the colon and the space trims the rest of the line already, in one go. Very compact, exactly right.. LIKE!

                – Robottinosino
                Mar 29 '13 at 20:11














              1












              1








              1







              Awk would make it most consise:



              system_profiler SPHardwareDataType | awk -F': ' '/Memory:/print $2'





              share|improve this answer















              Awk would make it most consise:



              system_profiler SPHardwareDataType | awk -F': ' '/Memory:/print $2'






              share|improve this answer














              share|improve this answer



              share|improve this answer








              edited Mar 29 '13 at 19:46

























              answered Mar 29 '13 at 19:36









              Dennis KaarsemakerDennis Kaarsemaker

              6,99812326




              6,99812326












              • Does not capture the unit of measure, in that case GB, which was desirable.. perhaps a capture "from field 2 to NF"? How would you write that?

                – Robottinosino
                Mar 29 '13 at 19:38











              • Not sure, so I simply edited the answer to use a proper -F parameter :)

                – Dennis Kaarsemaker
                Mar 29 '13 at 19:46












              • This is the best I have found anywhere. The -F to include both the colon and the space trims the rest of the line already, in one go. Very compact, exactly right.. LIKE!

                – Robottinosino
                Mar 29 '13 at 20:11


















              • Does not capture the unit of measure, in that case GB, which was desirable.. perhaps a capture "from field 2 to NF"? How would you write that?

                – Robottinosino
                Mar 29 '13 at 19:38











              • Not sure, so I simply edited the answer to use a proper -F parameter :)

                – Dennis Kaarsemaker
                Mar 29 '13 at 19:46












              • This is the best I have found anywhere. The -F to include both the colon and the space trims the rest of the line already, in one go. Very compact, exactly right.. LIKE!

                – Robottinosino
                Mar 29 '13 at 20:11

















              Does not capture the unit of measure, in that case GB, which was desirable.. perhaps a capture "from field 2 to NF"? How would you write that?

              – Robottinosino
              Mar 29 '13 at 19:38





              Does not capture the unit of measure, in that case GB, which was desirable.. perhaps a capture "from field 2 to NF"? How would you write that?

              – Robottinosino
              Mar 29 '13 at 19:38













              Not sure, so I simply edited the answer to use a proper -F parameter :)

              – Dennis Kaarsemaker
              Mar 29 '13 at 19:46






              Not sure, so I simply edited the answer to use a proper -F parameter :)

              – Dennis Kaarsemaker
              Mar 29 '13 at 19:46














              This is the best I have found anywhere. The -F to include both the colon and the space trims the rest of the line already, in one go. Very compact, exactly right.. LIKE!

              – Robottinosino
              Mar 29 '13 at 20:11






              This is the best I have found anywhere. The -F to include both the colon and the space trims the rest of the line already, in one go. Very compact, exactly right.. LIKE!

              – Robottinosino
              Mar 29 '13 at 20:11














              0














              This is all you really need for the Perl one:



              system_profiler SPHardwareDataType | perl -nle '/ry:s*(.*)/ && print $1'


              Some other choices:




              • system_profiler SPHardwareDataType | /bin/grep Me | gawk 'print $2,$3'



                Using /bin/grep eliminates the need for --color=never. grep is defined as an alias to grep --color=auto in /etc/bash.bashrc (at least it is on most Linux distros and, I guess, on OSX).




              • system_profiler SPHardwareDataType | /bin/grep Me | /bin/egrep -o '[1-9]+.+'



                The -o causes grep toprint only the matched characters.



              • system_profiler SPHardwareDataType | tail -n 1 | cut -d ' ' -f 4,5


              • system_profiler SPHardwareDataType | tail -n 1 | sed 's/.*: //g'






              share|improve this answer





























                0














                This is all you really need for the Perl one:



                system_profiler SPHardwareDataType | perl -nle '/ry:s*(.*)/ && print $1'


                Some other choices:




                • system_profiler SPHardwareDataType | /bin/grep Me | gawk 'print $2,$3'



                  Using /bin/grep eliminates the need for --color=never. grep is defined as an alias to grep --color=auto in /etc/bash.bashrc (at least it is on most Linux distros and, I guess, on OSX).




                • system_profiler SPHardwareDataType | /bin/grep Me | /bin/egrep -o '[1-9]+.+'



                  The -o causes grep toprint only the matched characters.



                • system_profiler SPHardwareDataType | tail -n 1 | cut -d ' ' -f 4,5


                • system_profiler SPHardwareDataType | tail -n 1 | sed 's/.*: //g'






                share|improve this answer



























                  0












                  0








                  0







                  This is all you really need for the Perl one:



                  system_profiler SPHardwareDataType | perl -nle '/ry:s*(.*)/ && print $1'


                  Some other choices:




                  • system_profiler SPHardwareDataType | /bin/grep Me | gawk 'print $2,$3'



                    Using /bin/grep eliminates the need for --color=never. grep is defined as an alias to grep --color=auto in /etc/bash.bashrc (at least it is on most Linux distros and, I guess, on OSX).




                  • system_profiler SPHardwareDataType | /bin/grep Me | /bin/egrep -o '[1-9]+.+'



                    The -o causes grep toprint only the matched characters.



                  • system_profiler SPHardwareDataType | tail -n 1 | cut -d ' ' -f 4,5


                  • system_profiler SPHardwareDataType | tail -n 1 | sed 's/.*: //g'






                  share|improve this answer















                  This is all you really need for the Perl one:



                  system_profiler SPHardwareDataType | perl -nle '/ry:s*(.*)/ && print $1'


                  Some other choices:




                  • system_profiler SPHardwareDataType | /bin/grep Me | gawk 'print $2,$3'



                    Using /bin/grep eliminates the need for --color=never. grep is defined as an alias to grep --color=auto in /etc/bash.bashrc (at least it is on most Linux distros and, I guess, on OSX).




                  • system_profiler SPHardwareDataType | /bin/grep Me | /bin/egrep -o '[1-9]+.+'



                    The -o causes grep toprint only the matched characters.



                  • system_profiler SPHardwareDataType | tail -n 1 | cut -d ' ' -f 4,5


                  • system_profiler SPHardwareDataType | tail -n 1 | sed 's/.*: //g'







                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Mar 29 '13 at 20:04

























                  answered Mar 29 '13 at 19:51









                  terdonterdon

                  134k33270450




                  134k33270450





















                      0














                      system_profiler SPHardwareDataType | sed -n 's/^ *Memory: //p'


                      p here is a flag to the s command (like g), not the p command, and means print the pattern space if the substitution takes place. You don't need g here, since the pattern can only match once.






                      share|improve this answer



























                        0














                        system_profiler SPHardwareDataType | sed -n 's/^ *Memory: //p'


                        p here is a flag to the s command (like g), not the p command, and means print the pattern space if the substitution takes place. You don't need g here, since the pattern can only match once.






                        share|improve this answer

























                          0












                          0








                          0







                          system_profiler SPHardwareDataType | sed -n 's/^ *Memory: //p'


                          p here is a flag to the s command (like g), not the p command, and means print the pattern space if the substitution takes place. You don't need g here, since the pattern can only match once.






                          share|improve this answer













                          system_profiler SPHardwareDataType | sed -n 's/^ *Memory: //p'


                          p here is a flag to the s command (like g), not the p command, and means print the pattern space if the substitution takes place. You don't need g here, since the pattern can only match once.







                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Mar 29 '13 at 22:34









                          Stéphane ChazelasStéphane Chazelas

                          314k57594953




                          314k57594953



























                              draft saved

                              draft discarded
















































                              Thanks for contributing an answer to Unix & Linux Stack Exchange!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid


                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.

                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function ()
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f70541%2fgrep-end-regex-matching%23new-answer', 'question_page');

                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              -grep, perl, sed

                              Popular posts from this blog

                              Frič See also Navigation menuinternal link

                              Identify plant with long narrow paired leaves and reddish stems Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?What is this plant with long sharp leaves? Is it a weed?What is this 3ft high, stalky plant, with mid sized narrow leaves?What is this young shrub with opposite ovate, crenate leaves and reddish stems?What is this plant with large broad serrated leaves?Identify this upright branching weed with long leaves and reddish stemsPlease help me identify this bulbous plant with long, broad leaves and white flowersWhat is this small annual with narrow gray/green leaves and rust colored daisy-type flowers?What is this chilli plant?Does anyone know what type of chilli plant this is?Help identify this plant

                              fontconfig warning: “/etc/fonts/fonts.conf”, line 100: unknown “element blank” The 2019 Stack Overflow Developer Survey Results Are In“tar: unrecognized option --warning” during 'apt-get install'How to fix Fontconfig errorHow do I figure out which font file is chosen for a system generic font alias?Why are some apt-get-installed fonts being ignored by fc-list, xfontsel, etc?Reload settings in /etc/fonts/conf.dTaking 30 seconds longer to boot after upgrade from jessie to stretchHow to match multiple font names with a single <match> element?Adding a custom font to fontconfigRemoving fonts from fontconfig <match> resultsBroken fonts after upgrading Firefox ESR to latest Firefox