Using PHP
I want to compare two text files, the first file is the main one that the other one should compare with it.
If a line of first.txt
does not exist in second.txt
or is different from it, the script should return the whole block of that line, for example:
first.txt
interface Vlan11
description xxx
ip address 10.10.10.10 255.255.255.255
shutdown
!
vlan 34
!
vlan 17
name sth
!
route-map sth
match ip address exm
set ip next-hop 1.2.3.4
!
second.txt
interface Vlan11
description xxx
ip address 20.20.20.20 255.255.255.255
shutdown
!
vlan 34
!
route-map sth
match ip address exm
set ip next-hop 1.2.3.4
!
For the compare I extracted the first.txt
lines using file()
and search them in the second.txt
, now the IP address is different in third line of second.txt
, then we should return the block of this line (from interface
to the bang(!
)):
interface Vlan11
description xxx
ip address 20.20.20.20 255.255.255.255
shutdown
!
or in the second.txt
one of vlan
blocks does not exists, so it should returns:
vlan 17
name sth
!
It's easy to write a regex that extracts the block between the two bangs, but because I should go back to the start of block I don't know what the pattern should start with.
Also I have another idea that every block starts with a character, then some lines that start with a space and then a bang at the end, but the problem is about how to start the pattern.