'grep positive/negative integer value only

I am looking to grep any positive/negative integers only and no decimals, or any other variation including a number.

I have a testpart1.txt which has:

This is a test for Part 1
Lets write -1324
Amount: $42.27
Numbers:
       -345,64
067

Phone numbers:

       (111)222-2424

This should output the following code:

This is a test for Part 1
Lets write -1324
067

I am new to bash and I cannot find how to exclude any number separated with a character like a '.' or ','. I am able to get all the numbers with the following code but I am stuck after that:

egrep '[0-9]' testpart1.txt

This gives me the opposite of what I want:

grep '[0-9]\.[0-9]' testpart1.txt


Solution 1:[1]

You may use this grep:

grep -E '(^|[[:blank:]])[+-]?[0-9]+([[:blank:]]|$)' file

This is a test for Part 1
Lets write -1324
067

Details:

  • -E: Enables extended regex matching
  • (^|[[:blank:]]): Match line start or a space or a tab character
  • [+-]?: Match optional + or -
  • [0-9]+: Match 1 or more digits
  • ([[:blank:]]|$): Match line end or a space or a tab character

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 anubhava