Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 检查文件中是否有数组元素_Linux_Bash_Shell_Scripting - Fatal编程技术网

Linux 检查文件中是否有数组元素

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

我正在编写一个bash脚本来检查文件中是否有数组元素

例如:

我有一个错误数组
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返回处理。谢谢。正是我要找的