提示grep仅显示匹配结果

时间:2014-09-10 00:56:18

标签: linux bash grep

您好我目前正在使用grep函数对我的/ etc / passwd文件进行搜索,以检查输入的GID是否与系统GID匹配。但我试图做一个grep函数但只显示echo内容而不是显示所有匹配的GID。以下是我的输出:

    elif grep -n $gid /etc/passwd|cut -f4 -d":"
      then 
    echo "$gid exist!"
    exit1 

2 个答案:

答案 0 :(得分:1)

-q选项会抑制输出:

elif grep -q $gid /etc/passwd
  then 
echo "$gid exist!"
exit1 

cut不需要。 注意这将匹配$gid中任意位置的passwd号,您可以进一步解析数据,将搜索范围限制在gid字段。例如:

elif awk -F ':' '{ print $4; }' /etc/passwd | grep -q $gid
then 
echo "$gid exist!"
exit1

答案 1 :(得分:1)

您可以使用选项“-o”来简化命令,该选项仅打印匹配行的匹配部分。 您还必须使用正则表达式以确保具有正确的GID,而不是部分GID或UID。

grep命令应该类似于:

grep -o -E "^[^:]+:[^:]*:[0-9]+:$gid:" /etc/passwd

整个解决方案是:

if [ condition ] ; then
    command
elif [ -n `grep -o -E "^[^:]+:[^:]*:[0-9]+:$gid:" /etc/passwd` ] ; then
    echo "$gid exists!"
    exit 1
fi