Grep regex to ignore sequence only if surrounded by fwd-slashes
Hi,
I've got a regex match to perform in a Bash script and can't quite get it right.
Basically I want to match all IP address like sequences in a file which may or may not contain an IP address but with the extra qualification of ignoring any IP-like sequence which begins and ends with a forward slash - to weed out software version numbers if a line like the following is in the HTML.
Here are the matching requirements:
I have b), c), d), and e) working fine by using 2 piped grep expressions:
The 1st call to grep matches an IP-like sequence with an extra char at the start and end as long as it's not '/' and then the 2nd call to grep gets rid of the extra char at the start and end.
The problem is with a) "11.11.11.11" - occasionally all that's there is an IP address with no character at all before or after it. So the not slash "[^/]" bits don't work cos there aren't any not-a-slash chars to match.
I've just spent ages trying to figure this out but can't. If it's better to use sed or awk instead of grep then that's not a problem.
Thanks all.
P.S. This is just to match IP-like number sequences, I'm deliberately not using quantifiers, i.e. {1,3}, in the first and last number sequence match of the expressions so that grep does not examine something like '1111.222.222.1111' and match just the '111.222.222.111' section of it, and in so doing cause something that is definitely not an IP address to get mistaken for one. I have a function which later examines the IP-like number sequences and makes sure the numbers are all in the range 0..255.
As long as you don't have input lines that contain both an ip address and an ip-like address between slash characters, the following seems to do what you want:
When given the 1st message in this thread as input, ipLikeAddressMatches is set to:
This User Gave Thanks to Don Cragun For This Post:
As long as you don't have input lines that contain both an ip address and an ip-like address between slash characters, the following seems to do what you want:
Thanks Don, that is a perfect solution. [No, they will never be on the same line.]
I should have been looking at the grep man page instead of scratching my head trying to work out a regex solution.
Thanks also for including "sort -u" didn't know about that and it saves a process. ["He who saves a process, saves the World", ummm, as a proverb it needs some work.]
Cheers.
---------- Post updated at 08:59 PM ---------- Previous update was at 08:56 PM ----------
Quote:
Originally Posted by disedorgue
Hi,
Or, if your grep have -P option, you can reduct one regex:
In theory I have the -P Perl regex available, but the "unimplemented features" factor has bitten me more than once so I avoid using that.
If you every did have a ip and ip-like addresses [gencon insert: On One Line] sed could just blank out the ip-like ones in this manor:
Thanks. That is an ever so slightly more elegant solution and the one which I shall in fact use. Don will get over it eventually, I'm sure it's nothing that some intensive therapy won't cure.
Of course Don might point out that yours will not actually work at the moment due to the mysterious disappearance of any actual input.
Hi,
I want to read a file line by line and exclude the lines that are beginning with special characters. The below code is working fine except when the line starts with hyphen (-) in the file.
for TEST in `cat $FILE | grep -E -v '#|/+' | awk '{FS=":"}NF > 0{print $1}'`
do
.
.
done
How... (4 Replies)
Hi,
How to achieve the displaying of sequence no while doing grep for an output.
Ex., need the output like below with the serial no, but not the available line number in the file
S.No Array Lun
1 AABC 7080
2 AABC 7081
3 AADD 8070
4 AADD 8071
5 ... (3 Replies)
Friends,
In the file i am having more then 100 lines like,
File1 had the values like this:
#Example East.server_01=EAST.SERVER_01
East.server_01=EAST.SERVER_01
West.server_01=WEST.SERVER_01
File2 had the values like this:
#Example EAST.SERVER_01=http://yahoo.com... (3 Replies)
Hi Guys.
I guess I have a very basic query but stuck with it :(
I have a file in which I want to extract particular content. The content is between standard format like :
Verify stats
A=0
B=12
C=34
TEST Failed
Now I want to extract data between "Verify stats" & "TEST Failed" but do... (6 Replies)
Hi,
I need to perform a grep from a file, but ignore any results from the first column.
For simplicity I have changed the actual data, but for arguments sake, I have a file that reads:
MONACO Monaco ASMonaco
MANUTD ManUtd ManchesterUnited
NEWCAS NewcastleUnited
NAC000 NAC ... (5 Replies)
Hi,
I have a pipe delimited file. I am checking for junk characters ( non printable characters and unicode values).
I am using the following code
grep '' file.txt
But i want to ignore the name fields. For example field2 is firstname so i want to ignore if the junk characters occur... (4 Replies)
Hello,
I'm working on unix with grep (GNU grep) 2.5.1. I'm going through some of the newer regex syntax using Regular Expression Reference - Advanced Syntax a guide.
ls -aLl /bin | grep "\(x\)"
Which works, just highlights 'x' where ever, when ever.
I'm trying to to get (?:) to work but... (4 Replies)
I admin two co-located servers. I built an app that creates subdirectories for users ie www.site.com/username.
one server that works just fine when you hit that url, it sees the index within and does as it should.
I moved the app to my other server running FEDORA 1 i686 standard, cPanel... (3 Replies)
Hi,
I have a log file containg records in sequence
<CRMSUB:MSIN=2200380,BSNBC=TELEPHON-7553&TS21-7716553&TS22-7716553,NDC=70,MSCAT=ORDINSUB,SUBRES=ONAOFPLM,ACCSUB=BSS,NUMTYP=SINGLE;
<ENTROPRSERV:MSIN=226380,OPRSERV=OCSI-PPSMOC-ACT-DACT&TCSI-PPSMTC-ACT-DACT&UCSI-USSD;... (17 Replies)