Lacer
Lacer

Reputation: 5958

unix - pattern matching in file

so I have a file with the following:

username=jsmith
api=3434kjklj23j4l3kj4l34j3l4j

I would like to return using regular expression "jsmith" and "3434kjklj23j4l3kj4l34j3l4j"

I know the regular expression for it is:

(username=)(.*) > \2
(api=)(.*) > \2

however using grep or sed or awk. I can't seem to figure out the way to use them without return the entire line.

How would you go about doing that with a commandline command?

Upvotes: 0

Views: 49

Answers (4)

Lacer
Lacer

Reputation: 5958

here's the answer that worked on the macos and RHEl7.

awk -F= '$1=="username"{print$2}'  testfile.txt
awk -F= '$1=="api"{print$2}'  testfile.txt

testfile.txt

username=user1 
api=pass1  
  username=user2 
api =pass2

Upvotes: 0

Walter A
Walter A

Reputation: 20002

Since you want to see chess with the input game=chess, here some solutions without matching username= or api=

cut -d"=" -f2- file
# or 
sed -n 's/[^=]*=//p' file

Upvotes: 0

blhsing
blhsing

Reputation: 106553

awk is made for this task:

awk -F= '{print$2}' file

If the file has other entries, you can limit the output with a condition:

awk -F= '$1=="username"||$1=="api"{print$2}' file

Upvotes: 3

James Brown
James Brown

Reputation: 37404

Here is one using bash, PCRE and positive lookbehind (where supported):

$ grep -Po "((?<=^username=)|(?<=^api=)).*" file
jsmith
3434kjklj23j4l3kj4l34j3l4j

ie. output everything that is preceeded by username= or api= that start the lines.

And one in awk:

$ awk 'sub(/^(username|api)=/,""){print}' file
jsmith
3434kjklj23j4l3kj4l34j3l4j

ie. print lines where preceeding ^username= or ^api= are removed first.

Upvotes: 1

Related Questions