Bash: Grep Pattern from Command Output

I'm really new with bash, but it's one of the subjects on school. One of the exercises was:

Give the line number of the file "/etc/passwd" where the information about your own login is.

Suppose USERNAME is my own login ID, I was able to do it perfectly in this way:

 cat /etc/passwd -n | grep USERNAME | cut -f1

Which simply gave the line number required (there may be a more optimised way). I wondered however, if there was a way to make the command more general so that it uses the output of whoami to represent the grep pattern, without scripting or using a variable. In other words, to keep it an easy-to-read one-line command, like so:

 cat /etc/passwd -n | grep (whoami) | cut -f1

Sorry if this is a really noob question.

3 Answers

cat /etc/passwd -n | grep `whoami` | cut -f1 

Surrounding a command in ` marks makes it execute the command and send the output into the command it's wrapped in.

1

You can do this with a single awk invocation:

awk -v me=$(whoami) -F: '$1==me{print NR}' /etc/passwd

In more detail:

  • the -v creates an awk variable called me and populates it with your user name.
  • the -F sets the field separator to : as befits the password file.
  • the $1==me only selects lines where the first field matches your user name.
  • the print outputs the record number (line).
2

Check command substitution in the bash man page.

You can you back ticks `` or $() , and personally I prefer the latter.

So for your question:

grep -n -e $(whoami) /etc/passwd | cut -f1 -d :

will substitute the output of whoami as the argument for the -e flag of the grep command and the output of the whole command will be line number in /etc/passwd of the running user.

2

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Chloe Bennett

Chloe Bennett

Culture, Media & Entertainment Columnist

Chloe Bennett explores the intersection of pop culture, streaming entertainment, digital trends, and contemporary lifestyle. Her weekly commentary reaches thousands of culture enthusiasts.

Share this article
Twitter Facebook Pinterest