如何循环 grep 命令结果并检查循环内每个值的条件?

如何循环 grep 命令结果并检查循环内每个值的条件?

所以我有一个文件,其中有一些人的全名(名字和姓氏),位于以某种特定模式开头的各个单独的行上。在 grep 命令的帮助下,我成功地仅提取了全名并将其存储在变量中。现在我需要访问每个全名并检查它是否与另一个变量中的某些值匹配。我尝试使用 for 循环,但它将名字和姓氏视为单独的项目,因为它们之间有空格。我需要将名字和姓氏放在一起并与其他变量进行检查。

例如。运行 grep 命令后,我得到 3 个值并存储在变量名称中。

Abc xyz
Pqr def
Lmn ghi

运行 for 循环如下:

for n in $names; do
 echo $n
   if [ "$n" = "Abc Pqr" ]; then
    echo "something"
   fi
done

给出以下输出:

Abc
xyz
Pqr
def
Lmn
ghi

我想要$n两者都拥有Abc xyz(名字姓)在一起,以便我可以检查情况。

答案1

我格式化了您的问题,包括您的伪代码,但是您尝试执行此操作的方式将不起作用。您的$names变量不是数组,而是包含换行符的单个长字符串。这就是您将来可以迭代此类字符串的方式。

这是我们的示例names.txt文件,我们将对其进行 grep 来模拟该过程

###                 names.txt                  ###
### our sample file to grep over as an example ###
##################################################
Abc xyz
Pqr def
Lmn ghi

代码如下:


names=$(grep -v '^#' names.txt)

i=1;
while read n; do 
  echo "Name $i. $n"
  if [[ "$n" == "Pqr def" ]]; then
      echo "--- $n was found at line $i"
  fi    
  i=$(($i+1)); 
done <<< "$names"

你的输出将如下所示:

Name 1. Abc xyz
Name 2. Pqr def
--- Pqr def was found on line 2
Name 3. Lmn ghi

相关内容