首页 > 解决方案 > 正则表达式 POSIX - 我如何查找行首是否包含来自行中稍后出现的单词中的单词

问题描述

我有一个 UNIX passwd 文件,如果 GECOS 的前 7 个字符在用户名内,我需要使用 egrep 查找。我想检查用户名 (jkennedy) 是否包含 GECOS 中的“kennedy”一词。

我打算使用反向引用,但用户名在 gecos 之前,所以我不知道如何实现它。

例如 passwd 文件包含这一行:

jkennedy:x:2473:1067:kennedy john:/root:/bin/bash

标签: regexposix

解决方案


假设您不希望区分大小写来破坏您的匹配 -

declare -l tmpUsr tmpName
while IFS=: read usr x x x name x
do tmpUsr="$usr"; tmpName="$name"
   (( ${#name} )) && [[ "$tmpUsr" =~ ${tmpName:0:7} ]] &&
      printf "$usr ($name<${tmpName:0:7}>)\n"
done</etc/passwd

推荐阅读