简体   繁体   中英

Unix/Linux Shell Grep to cut

I have a file, say 'names' that looks like this

first middle last     userid
Brian Duke Willy      willybd
...

whenever I use the following

line=`grep "willybd" /dir/names`
name=`echo $line | cut -f1-3 -d' '`
echo $name

It prints the following:

Brian Duke Willy      willybd
Brian Duke Willy

My question is, how would I get it to print just "Brian Duke Willy" without first printing the original line that I cut?

The usual way to do this sort of thing is:

awk '/willybd/{ print $1, $2, $3 }' /dir/names

or, to be more specific

awk '$4 ~ /willybd/ { print $1, $2, $3 }' /dir/names

or

awk '$4 == "willybd" { print $1, $2, $3 }' /dir/names
grep "willybd" /dir/names | cut "-d " -f1-3

剪切的默认定界符是制表符,而不是空格。

Unless you need the intermediate variables, you can use

grep "willybd" /dir/names | cut -f1-3 -d' '

One of the beautiful features of linux is that most commands can be used as filters: they read from stdin and write to stdout , which means you can "pipe" the output of one command into the next command. That's what the | character does. It's pronounced pipe .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM