Linux 检查文件中是否有数组元素
我正在编写一个bash脚本来检查文件中是否有数组元素 例如: 我有一个错误数组Linux 检查文件中是否有数组元素,linux,bash,shell,scripting,Linux,Bash,Shell,Scripting,我正在编写一个bash脚本来检查文件中是否有数组元素 例如: 我有一个错误数组errors=(“1234”“5678”“9999”) 我有一个包含字符串模式的文件 123400 452612 9999A0 1010EB 我希望在包含错误的文件上循环,并检查是否有任何数组元素与文件中的任何字符串模式匹配。如果有,那么给我它在文件中匹配的精确阵列模式,以便进一步处理 有什么办法吗?听起来你只是想要一个循环: for error in "${errors[@]}"; do if grep -q
errors=(“1234”“5678”“9999”)
我有一个包含字符串模式的文件
123400 452612 9999A0 1010EB
我希望在包含错误的文件上循环,并检查是否有任何数组元素与文件中的任何字符串模式匹配。如果有,那么给我它在文件中匹配的精确阵列模式,以便进一步处理
有什么办法吗?听起来你只是想要一个循环:
for error in "${errors[@]}"; do
if grep -qE "(^| )$error( |\$)" file; then
# $error was found in the file
fi
done
这与错误匹配,错误前面是行首或空格,后面是空格或行尾
我试图不匹配子字符串中错误的外观,但如果您不介意,则可以将grep命令更改为:
grep -qF "$error" file
如果错误字符串出现在行的任何位置,则返回success。脚本如下所示
#/bin/bash
errors=("1234" "5678" "9999")
for error in "${errors[@]}"
do
grep -o "$error" file
done
对于示例文件
$ cat file
123400 452612 9999A0 1010EB
脚本生成一个输出
$ ./script.sh
1234
9999
表示数组中的上述两个键在文件中已匹配。grep
中的-o
标志仅用于识别阵列中的匹配部分。mangrep
页面摘录
-o, --only-matching
Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.
下面是一种只需调用
grep
一次的方法:
$ grep -oFf <(printf "%s\n" "${errors[@]}") file
1234
9999
$grep-文件中是否有多行?(或)只有一行固定模式?错误是否可以出现在文件中的任何位置?错误是否可以出现在文件中的任何位置。该文件包含多行,没有固定长度。例如:如果1234
匹配,则需要整行123400 452612 9999A0 1010EB
或仅123400
如果数组元素1234与文件中的123400匹配,则我需要1234返回处理。谢谢。正是我要找的