使用grep查找一行并从该行只打印2个单词

时间:2018-01-17 14:43:41

标签: linux bash

我是linux的新手,我决定学习shell脚本。我创建了一个包含以下文本的文件data.txt:

12345 Nick Abrams A 10900
67890 George Kennedy I 20000
(text goes on...)

第一个字段是卡的密码,第二个是客户的名称,第三个是姓氏,第四个字段表示卡是否处于活动状态(或非活动状态),最后一个字段是客户端的余额。我需要编写一个从键盘接收客户端引脚的脚本,如果该引脚写在文本文件中,那么脚本应该在屏幕上打印客户端的名称和姓氏。我用过这样的grep

grep "^$pin" data.txt

但它返回客户端的所有细节。我只需要打印第二个和第三个字段并忽略其他所有字段。是否有任何参数可以隔离我需要的单词?

3 个答案:

答案 0 :(得分:2)

请您试着跟随并告诉我这是否对您有帮助。

cat script.ksh
echo "Please enter your choice:"
read value

awk -v val="$value" '$1==val{print $2,$3}' Input_file

编辑: 此处在脚本中添加grepcut的解决方案。

cat script.ksh
echo "Please enter your choice:"
read value

grep "$value" Input_file | cut -d" " -f2,3

答案 1 :(得分:1)

hive.merge.smallfiles.avgsize

输入:#!/bin/bash echo "Enter PIN, please" read pin grep "${pin}" pins.txt | awk '{print $2" "$3}'

输出:12345

Nick Abrams

cut

答案 2 :(得分:1)

更好地使用sed:

sed -n 's/^'"$pin \([^ ]* [^ ]*\).*"'/\1/p' data.txt

此命令匹配以$pin开头的行,并且只写\(\)之间的正则表达式部分