Search code examples
grepcygwinphpass

Grepping list of phpass hashes against a file


I'm trying to grep multiple strings which look like this (there's a few hundred) against a file which contains data:string

Example strings: (no sensitive data is provided, they have been modified).

$H$9a...DcuCqC/rMVmfiFNm2rqhK5vFW1  
$H$9n...AHZAV.sTefg8ap8qI8U4A5fY91  
$H$9o...Bi6Z3E04x6ev1ZCz0hItSh2JJ/  
$H$9w...CFva1ddp8IRBkgwww3COVLf/K1 

I've been researching how to grep a file of patterns against another file, and came across the following commands

grep -f strings.txt datastring.txt > output.txt  
grep -Ff strings.txt datastring.txt > output.txt

But unfortunately, these commands do NOT work successfully, and only print out a handful of results to my output file. I think it may be something to do with the symbols contained in strings.txt, but I'm unsure. Any help/advice would be great.

To further mention, I'm using Cygwin on Windows (if this is relevant).

Here's an updated example:
strings.txt contains the following:

$H$9a...DcuCqC/rMVmfiFNm2rqhK5vFW1  
$H$9n...AHZAV.sTefg8ap8qI8U4A5fY91  
$H$9o...Bi6Z3E04x6ev1ZCz0hItSh2JJ/  
$H$9w...CFva1ddp8IRBkgwww3COVLf/K1 

datastring.txt contains the following:

$H$9a...DcuCqC/rMVmfiFNm2rqhK5vFW1:53491  
$H$9n...AHZAV.sTefg8ap8qI8U4A5fY91:03221  
$H$9o...Bi6Z3E04x6ev1ZCz0hItSh2JJ/:20521  
$H$9w...CFva1ddp8IRBkgwww3COVLf/K1:30142  

So technically, all lines should be included in the OUTPUT file, but only this line is outputted:

$H$9w...CFva1ddp8IRBkgwww3COVLf/K1:30142 

I just don't understand.


Solution

  • You have showed the output of cat -A strings.txt elsewhere, which includes ^M representing a CR (carriage return) character at the end of each line:

    screenshot

    This indicates your file has Windows line endings (CR LF) instead of the Unix line endings (only LF) that grep would expect.

    You can convert files with dos2unix strings.txt and back with unix2dos strings.txt.

    Alternatively, if you don't have dos2unix installed in your Cygwin environment, you can also do that with sed.

    sed -i 's/\r$//' strings.txt    # dos2unix
    sed -i 's/$/\r/' strings.txt    # unix2dos