I would like to get the string from the file after user defined keyword. Example if keyword is "yellow_y", expected output to be acc.
Tried grep -oP '(?<=yellow_y).*'
but not work.
File:
yellow abc \
yellow_x abc \
yellow_y acc \
blue abb \
pink abb \
pink_xx acd \
CodePudding user response:
With your shown samples, please try following grep
command. Written and tested in GNU grep
.
grep -oP '^yellow_y\s \K\S ' Input_file
Explanation: Simple explanation would be, using -oP
options of GNU grep
which is for printing matched words and enabling PCRE regex respectively. In main program using regex to match condition. Checking if line starts from yellow_y followed by 1 or more spaces then using \K
capability of GNU grep
to forget this match and matching 1 or more non-spaces characters then which will provide required values in output.
CodePudding user response:
To get acc
, you can also use awk
here instead of grep
:
awk '$1 == "yellow_y"{print $2}' file
This means: if the first word (first non-whitespace chunk) is yellow_y
, return the second non-whitespace chunk of characters (the second word).
See an online demo:
#!/bin/bash
s='yellow abc \
yellow_x abc \
yellow_y acc \
blue abb \
pink abb \
pink_xx acd \'
awk '$1 == "yellow_y"{print $2}' <<< "$s"
Output is acc
.