使用shell搜索包含数组中元素列表的文件

使用shell搜索包含数组中元素列表的文件,shell,Shell,我有一个数组中的元素列表(例如xml标记),如果我要在一个文件列表中搜索它们并将匹配行提取到一个临时文件中,有什么好方法 以下是我在脚本中尝试的内容: myArray =(ZZ1 BZ1 ZZ2 AZ1 AZ2) echo "${myArray[@]}" while read line do if [[ "$line" =~ ${myArray[@]} ]];then echo $line | awk -F "[><]" '{print $2"|"$3}' fi

我有一个数组中的元素列表(例如xml标记),如果我要在一个文件列表中搜索它们并将匹配行提取到一个临时文件中,有什么好方法

以下是我在脚本中尝试的内容:

myArray =(ZZ1 BZ1 ZZ2 AZ1 AZ2)

echo "${myArray[@]}"

while read line
do
 if [[ "$line" =~ ${myArray[@]} ]];then
       echo $line | awk -F "[><]" '{print $2"|"$3}'
fi
done < file.xml
myArray=(ZZ1 BZ1 ZZ2 AZ1 AZ2)
回显“${myArray[@]}”
读行时
做
如果[[“$line”=~${myArray[@]}]];然后

echo$line | awk-F“[>此脚本将搜索
file.xml
以查找
myArray
中出现的任何字符串:

#!/bin/bash
myArray=(ZZ1 BZ1 ZZ2 AZ1 AZ2)

regex="$(echo "(${myArray[@]})" | sed 's/ /|/g')"

while read line
do
 if [[ "$line" =~ $regex ]];then
       echo $line | awk -F "[><]" '{print $2"|"$3}'
fi
done < file.xml
!/bin/bash
myArray=(ZZ1 BZ1 ZZ2 AZ1 AZ2)
regex=“$(echo”(${myArray[@]})”| sed's/|/g')”
读行时
做
如果[[“$line”=~$regex]];则

echo$line | awk-F“[>您不需要shell中的循环,可以在awk本身中实现

myArray=(ZZ1 BZ1 ZZ2 AZ1 AZ2)
re=$(printf "%q|" "${myArray[@]}")

awk -F "[><]" -v re="(${re%|*})" '$0 ~ re {print $2"|"$3}' file.xml
myArray=(ZZ1 BZ1 ZZ2 AZ1 AZ2)
re=$(printf“%q |”“${myArray[@]}”)

awk-F“[>但是上面的比较--”$line"=~$regex正在扫描文件并获取所有数据以及我正在查找的数据。如何筛选它们?@user3290453不应该这样做。您可以尝试将行
echo$regex
添加到您的脚本中,并验证regex是否与上面的一样。如果是,请向我显示它允许通过的行是什么类型,您不需要我不想要。