I've this command grep -oP '.*?(?=\:)' which gets words before : character, the thing I want is to get all the words after : character
How can I do it?
            Asked
            
        
        
            Active
            
        
            Viewed 678 times
        
    2 Answers
3
            You can use \K, which tells the engine to pretend that the match attempt started at this position. You can have something like:
grep -oP '.*:\K(.*)'
Example:
$ echo "hello:world" | grep -oP ":\K.*"
world
 
    
    
        Maroun
        
- 94,125
- 30
- 188
- 241
3
            
            
        If you need to get a word after the last :, you need
grep -oP '.*:\K\w+' file
If you need to get a word after the first :, you need
grep -oP '^[^:]*:\K\w+'
If you need to get all the words after a :, you need
grep -oP ':\K\w+'
If a "word" is a sequence of non-whitespace chars, you need to replace \w with \S:
grep -oP '.*:\K\S+' file
grep -oP '^[^:]*:\K\S+'
If a "word" is a sequence of any Unicode letters, you need to replace \w with \p{L}:
grep -oP '.*:\K\p{L}+' file
grep -oP '^[^:]*:\K\p{L}+'
NOTES:
- \Kis a match reset operator that clears out the current overall match memory buffer.
- -o- option that outputs the matched substrings, not matched lines
- -P- enables the PCRE regex engine rather than the default POSIX one.
 
    
    
        Wiktor Stribiżew
        
- 607,720
- 39
- 448
- 563
