How to grep for contents after pattern?
grep, linux
Solution
grep 'potato:' file.txt | sed 's/^.*: //'
`grep` looks for any line that contains the string `potato:`, then, for each of these lines, `sed` replaces (`s///` - substitute) any character (`.*`) from the beginning of the line (`^`) until the last occurrence of the sequence `:` (colon followed by space) with the empty string (`s/...//` - substitute the first part with the second part, which is empty).
or
grep 'potato:' file.txt | cut -d\ -f2
For each line that contains `potato:`, `cut` will split the line into multiple fields delimited by space (`-d\` - `d` = delimiter, `\` = escaped space character, something like `-d" "` would have also worked) and print the second field of each such line (`-f2`).
or
grep 'potato:' file.txt | awk '{print $2}'
For each line that contains `potato:`, `awk` will print the second field (`print $2`) which is delimited by default by spaces.
or
grep 'potato:' file.txt | perl -e 'for(<>){s/^.*: //;print}'
All lines that contain `potato:` are sent to an inline (`-e`) Perl script that takes all lines from `stdin`, then, for each of these lines, does the same substitution as in the first example above, then prints it.
or
awk '{if(/potato:/) print $2}' < file.txt
The file is sent via `stdin` (`< file.txt` sends the contents of the file via `stdin` to the command on the left) to an `awk` script that, for each line that contains `potato:` (`if(/potato:/)` returns true if the regular expression `/potato:/` matches the current line), prints the second field, as described above.
or
perl -e 'for(<>){/potato:/ && s/^.*: // && print}' < file.txt
The file is sent via `stdin` (`< file.txt`, see above) to a Perl script that works similarly to the one above, but this time it also makes sure each line contains the string `potato:` (`/potato:/` is a regular expression that matches if the current line contains `potato:`, and, if it does (`&&`), then proceeds to apply the regular expression described above and prints the result).
Problem
Given a file, for example: ``` potato: 1234 apple: 5678 potato: 5432 grape: 4567 banana: 5432 sushi: 56789 ``` I'd like to grep for all lines that start with `potato:` but only pipe the numbers that follow `potato:`. So in the above example, the output would be: ``` 1234 5432 ``` How can I do that?