Grep remove line with 0 but not 0.2?












1















I have a file similar to this:



0
0
0.02
0
0
0
0


I want to remove all the lines with a single zero.



I was thinking to use something like:



grep -v "0"


But this also removes the instances of 0.2.



I also saw there is a whole word option -w but this doesn't seem to work either.



How can I remove all lines which are just a single 0 but keep lines which may contain a 0?










share|improve this question



























    1















    I have a file similar to this:



    0
    0
    0.02
    0
    0
    0
    0


    I want to remove all the lines with a single zero.



    I was thinking to use something like:



    grep -v "0"


    But this also removes the instances of 0.2.



    I also saw there is a whole word option -w but this doesn't seem to work either.



    How can I remove all lines which are just a single 0 but keep lines which may contain a 0?










    share|improve this question

























      1












      1








      1








      I have a file similar to this:



      0
      0
      0.02
      0
      0
      0
      0


      I want to remove all the lines with a single zero.



      I was thinking to use something like:



      grep -v "0"


      But this also removes the instances of 0.2.



      I also saw there is a whole word option -w but this doesn't seem to work either.



      How can I remove all lines which are just a single 0 but keep lines which may contain a 0?










      share|improve this question














      I have a file similar to this:



      0
      0
      0.02
      0
      0
      0
      0


      I want to remove all the lines with a single zero.



      I was thinking to use something like:



      grep -v "0"


      But this also removes the instances of 0.2.



      I also saw there is a whole word option -w but this doesn't seem to work either.



      How can I remove all lines which are just a single 0 but keep lines which may contain a 0?







      grep






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked 34 mins ago









      Philip KirkbridePhilip Kirkbride

      2,47313084




      2,47313084






















          5 Answers
          5






          active

          oldest

          votes


















          3














          grep -vx 0


          From man grep:



          -x, --line-regexp
          Select only those matches that exactly match the whole line.
          For a regular expression pattern, this is like parenthesizing
          the pattern and then surrounding it with ^ and $.


          -w fails because the first 0 in 0.02 is considered a "word", and hence this line is matched. This is because it is followed by a "non-word" character. You can see this if you run the original command without -v, i.e. grep -w "0".






          share|improve this answer































            2














            With grep:



            grep -v "^0$" file


            ^ means beginning of the line, $ means end of the line.






            share|improve this answer































              0















              • b - word border


              grep -v "b0b"




              • match beginning of line, your pattern and end of line


              grep -v "^0$"




              • or as @Sparhawk suggested -vx lineregexp


              -w works, but in your case 0.2 are two words because dot character is a word separator.






              share|improve this answer
























              • grep -v "b0b" doesn't really work here. What version of grep do you use?

                – Arkadiusz Drabczyk
                19 mins ago



















              0














              grep's -w is a bit convoluted in a way that it splits up the original string into word and non-word constituents (anything except letters, digits or underscore) . Since it has already encountered a a valid word constituent 0 in 0.02 it had asserted the negation logic to remove the line.



              Using sed is a bit easy in this context to just remove the whole words that match



              sed '/^0$/d' file





              share|improve this answer































                0














                When the lines you want to delete only contain a 0 followed by the next line you can select those lines by issuing the following command:



                grep "^0$"


                This will only print the occurrences of 0 that are at the end of a line and at the beginning of a line at the same time.



                I hope this helps!






                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%2f500549%2fgrep-remove-line-with-0-but-not-0-2%23new-answer', 'question_page');
                  }
                  );

                  Post as a guest















                  Required, but never shown

























                  5 Answers
                  5






                  active

                  oldest

                  votes








                  5 Answers
                  5






                  active

                  oldest

                  votes









                  active

                  oldest

                  votes






                  active

                  oldest

                  votes









                  3














                  grep -vx 0


                  From man grep:



                  -x, --line-regexp
                  Select only those matches that exactly match the whole line.
                  For a regular expression pattern, this is like parenthesizing
                  the pattern and then surrounding it with ^ and $.


                  -w fails because the first 0 in 0.02 is considered a "word", and hence this line is matched. This is because it is followed by a "non-word" character. You can see this if you run the original command without -v, i.e. grep -w "0".






                  share|improve this answer




























                    3














                    grep -vx 0


                    From man grep:



                    -x, --line-regexp
                    Select only those matches that exactly match the whole line.
                    For a regular expression pattern, this is like parenthesizing
                    the pattern and then surrounding it with ^ and $.


                    -w fails because the first 0 in 0.02 is considered a "word", and hence this line is matched. This is because it is followed by a "non-word" character. You can see this if you run the original command without -v, i.e. grep -w "0".






                    share|improve this answer


























                      3












                      3








                      3







                      grep -vx 0


                      From man grep:



                      -x, --line-regexp
                      Select only those matches that exactly match the whole line.
                      For a regular expression pattern, this is like parenthesizing
                      the pattern and then surrounding it with ^ and $.


                      -w fails because the first 0 in 0.02 is considered a "word", and hence this line is matched. This is because it is followed by a "non-word" character. You can see this if you run the original command without -v, i.e. grep -w "0".






                      share|improve this answer













                      grep -vx 0


                      From man grep:



                      -x, --line-regexp
                      Select only those matches that exactly match the whole line.
                      For a regular expression pattern, this is like parenthesizing
                      the pattern and then surrounding it with ^ and $.


                      -w fails because the first 0 in 0.02 is considered a "word", and hence this line is matched. This is because it is followed by a "non-word" character. You can see this if you run the original command without -v, i.e. grep -w "0".







                      share|improve this answer












                      share|improve this answer



                      share|improve this answer










                      answered 25 mins ago









                      SparhawkSparhawk

                      9,74264094




                      9,74264094

























                          2














                          With grep:



                          grep -v "^0$" file


                          ^ means beginning of the line, $ means end of the line.






                          share|improve this answer




























                            2














                            With grep:



                            grep -v "^0$" file


                            ^ means beginning of the line, $ means end of the line.






                            share|improve this answer


























                              2












                              2








                              2







                              With grep:



                              grep -v "^0$" file


                              ^ means beginning of the line, $ means end of the line.






                              share|improve this answer













                              With grep:



                              grep -v "^0$" file


                              ^ means beginning of the line, $ means end of the line.







                              share|improve this answer












                              share|improve this answer



                              share|improve this answer










                              answered 24 mins ago









                              Arkadiusz DrabczykArkadiusz Drabczyk

                              7,95521734




                              7,95521734























                                  0















                                  • b - word border


                                  grep -v "b0b"




                                  • match beginning of line, your pattern and end of line


                                  grep -v "^0$"




                                  • or as @Sparhawk suggested -vx lineregexp


                                  -w works, but in your case 0.2 are two words because dot character is a word separator.






                                  share|improve this answer
























                                  • grep -v "b0b" doesn't really work here. What version of grep do you use?

                                    – Arkadiusz Drabczyk
                                    19 mins ago
















                                  0















                                  • b - word border


                                  grep -v "b0b"




                                  • match beginning of line, your pattern and end of line


                                  grep -v "^0$"




                                  • or as @Sparhawk suggested -vx lineregexp


                                  -w works, but in your case 0.2 are two words because dot character is a word separator.






                                  share|improve this answer
























                                  • grep -v "b0b" doesn't really work here. What version of grep do you use?

                                    – Arkadiusz Drabczyk
                                    19 mins ago














                                  0












                                  0








                                  0








                                  • b - word border


                                  grep -v "b0b"




                                  • match beginning of line, your pattern and end of line


                                  grep -v "^0$"




                                  • or as @Sparhawk suggested -vx lineregexp


                                  -w works, but in your case 0.2 are two words because dot character is a word separator.






                                  share|improve this answer














                                  • b - word border


                                  grep -v "b0b"




                                  • match beginning of line, your pattern and end of line


                                  grep -v "^0$"




                                  • or as @Sparhawk suggested -vx lineregexp


                                  -w works, but in your case 0.2 are two words because dot character is a word separator.







                                  share|improve this answer












                                  share|improve this answer



                                  share|improve this answer










                                  answered 21 mins ago









                                  Jakub JindraJakub Jindra

                                  817




                                  817













                                  • grep -v "b0b" doesn't really work here. What version of grep do you use?

                                    – Arkadiusz Drabczyk
                                    19 mins ago



















                                  • grep -v "b0b" doesn't really work here. What version of grep do you use?

                                    – Arkadiusz Drabczyk
                                    19 mins ago

















                                  grep -v "b0b" doesn't really work here. What version of grep do you use?

                                  – Arkadiusz Drabczyk
                                  19 mins ago





                                  grep -v "b0b" doesn't really work here. What version of grep do you use?

                                  – Arkadiusz Drabczyk
                                  19 mins ago











                                  0














                                  grep's -w is a bit convoluted in a way that it splits up the original string into word and non-word constituents (anything except letters, digits or underscore) . Since it has already encountered a a valid word constituent 0 in 0.02 it had asserted the negation logic to remove the line.



                                  Using sed is a bit easy in this context to just remove the whole words that match



                                  sed '/^0$/d' file





                                  share|improve this answer




























                                    0














                                    grep's -w is a bit convoluted in a way that it splits up the original string into word and non-word constituents (anything except letters, digits or underscore) . Since it has already encountered a a valid word constituent 0 in 0.02 it had asserted the negation logic to remove the line.



                                    Using sed is a bit easy in this context to just remove the whole words that match



                                    sed '/^0$/d' file





                                    share|improve this answer


























                                      0












                                      0








                                      0







                                      grep's -w is a bit convoluted in a way that it splits up the original string into word and non-word constituents (anything except letters, digits or underscore) . Since it has already encountered a a valid word constituent 0 in 0.02 it had asserted the negation logic to remove the line.



                                      Using sed is a bit easy in this context to just remove the whole words that match



                                      sed '/^0$/d' file





                                      share|improve this answer













                                      grep's -w is a bit convoluted in a way that it splits up the original string into word and non-word constituents (anything except letters, digits or underscore) . Since it has already encountered a a valid word constituent 0 in 0.02 it had asserted the negation logic to remove the line.



                                      Using sed is a bit easy in this context to just remove the whole words that match



                                      sed '/^0$/d' file






                                      share|improve this answer












                                      share|improve this answer



                                      share|improve this answer










                                      answered 10 mins ago









                                      InianInian

                                      4,4851025




                                      4,4851025























                                          0














                                          When the lines you want to delete only contain a 0 followed by the next line you can select those lines by issuing the following command:



                                          grep "^0$"


                                          This will only print the occurrences of 0 that are at the end of a line and at the beginning of a line at the same time.



                                          I hope this helps!






                                          share|improve this answer






























                                            0














                                            When the lines you want to delete only contain a 0 followed by the next line you can select those lines by issuing the following command:



                                            grep "^0$"


                                            This will only print the occurrences of 0 that are at the end of a line and at the beginning of a line at the same time.



                                            I hope this helps!






                                            share|improve this answer




























                                              0












                                              0








                                              0







                                              When the lines you want to delete only contain a 0 followed by the next line you can select those lines by issuing the following command:



                                              grep "^0$"


                                              This will only print the occurrences of 0 that are at the end of a line and at the beginning of a line at the same time.



                                              I hope this helps!






                                              share|improve this answer















                                              When the lines you want to delete only contain a 0 followed by the next line you can select those lines by issuing the following command:



                                              grep "^0$"


                                              This will only print the occurrences of 0 that are at the end of a line and at the beginning of a line at the same time.



                                              I hope this helps!







                                              share|improve this answer














                                              share|improve this answer



                                              share|improve this answer








                                              edited 4 mins ago

























                                              answered 10 mins ago









                                              majesticLSDmajesticLSD

                                              423




                                              423






























                                                  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%2f500549%2fgrep-remove-line-with-0-but-not-0-2%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







                                                  Popular posts from this blog

                                                  Liste der Baudenkmale in Friedland (Mecklenburg)

                                                  Single-Malt-Whisky

                                                  Czorneboh