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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.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
Bash 猛击。Grep文本文件查找其他文件中的行_Bash_Shell_Grep - Fatal编程技术网

Bash 猛击。Grep文本文件查找其他文件中的行

Bash 猛击。Grep文本文件查找其他文件中的行,bash,shell,grep,Bash,Shell,Grep,是否可以分析文本文件,比如说log.txt从另一个文件中查找行-比如说config.txt。我试着做以下事情: while read -r line; do if grep -q $line $log_path; then echo "Found line: $line" >> $out_log break else echo "Line not found: $line" >> $out_log fi done

是否可以分析文本文件,比如说
log.txt
从另一个文件中查找行-比如说
config.txt
。我试着做以下事情:

while read -r line;
do
    if grep -q $line $log_path; then 
        echo "Found line: $line" >> $out_log
        break
    else echo "Line not found: $line" >> $out_log
    fi
done < $conf_path
读取-r行时
;
做
如果grep-q$line$log\u路径;然后
回显“找到行:$line”>>$out\u日志
打破
else echo“未找到行:$Line”>$out\u log
fi
完成<$conf_路径
$conf_path
是类似于
/path/to/config.txt

$log\u path
是类似于
/path/to/log.txt

$out\u log
是用于测试脚本是否正常工作的
/path/to/output\u log.txt

示例
$line
“错误:消息:\[Library not found\!\]”
。我在脚本之外测试了grep指令,它正确地发现了这一行,所以我不认为grep是这里的问题。每次执行
else
语句时

谢谢社区的建议

致以最良好的问候,Max

请尝试下面的内容

代码:

while read -r line
do if grep -q "${line}" $log_path
then  echo "Found line: $line" >> $out_log
else echo "Line not found: $line" >> $out_log
fi
done < $conf_path
bash-3.2$ echo $conf_path ; cat $conf_path
config.txt
ERROR: MESSAGE: \[Library not found \!\]
ERROR: MESSAGE: \[File not found \!\]
ERROR: MESSAGE: \[Path not found \!\]
ERROR: MESSAGE: \[Permission denied \!\]
bash-3.2$ 
bash-3.2$ echo $log_path; cat $log_path
log.txt
INFO: MESSAGE: Script Starts
INFO: MESSAGE: Some command output
ERROR: MESSAGE: [Library not found !]
INFO: MESSAGE: Some other command output
ERROR: MESSAGE: [Path not found !]
INFO: MESSAGE: Exit script with 2
bash-3.2$ 
bash-3.2$ while read -r line; do if grep -q "${line}" $log_path; then  echo "Found line: $line" >> $out_log; else echo "Line not found: $line" >> $out_log; fi; done < $conf_path
bash-3.2$ 
bash-3.2$ echo $out_log; cat $out_log
output_log.txt
Found line: ERROR: MESSAGE: \[Library not found \!\]
Line not found: ERROR: MESSAGE: \[File not found \!\]
Found line: ERROR: MESSAGE: \[Path not found \!\]
Line not found: ERROR: MESSAGE: \[Permission denied \!\]
bash-3.2$ 
读取时-r行
如果grep-q“${line}”$log\u路径
然后回显“找到行:$line”>>$out\u log
else echo“未找到行:$Line”>$out\u log
fi
完成<$conf_路径
示例:

while read -r line
do if grep -q "${line}" $log_path
then  echo "Found line: $line" >> $out_log
else echo "Line not found: $line" >> $out_log
fi
done < $conf_path
bash-3.2$ echo $conf_path ; cat $conf_path
config.txt
ERROR: MESSAGE: \[Library not found \!\]
ERROR: MESSAGE: \[File not found \!\]
ERROR: MESSAGE: \[Path not found \!\]
ERROR: MESSAGE: \[Permission denied \!\]
bash-3.2$ 
bash-3.2$ echo $log_path; cat $log_path
log.txt
INFO: MESSAGE: Script Starts
INFO: MESSAGE: Some command output
ERROR: MESSAGE: [Library not found !]
INFO: MESSAGE: Some other command output
ERROR: MESSAGE: [Path not found !]
INFO: MESSAGE: Exit script with 2
bash-3.2$ 
bash-3.2$ while read -r line; do if grep -q "${line}" $log_path; then  echo "Found line: $line" >> $out_log; else echo "Line not found: $line" >> $out_log; fi; done < $conf_path
bash-3.2$ 
bash-3.2$ echo $out_log; cat $out_log
output_log.txt
Found line: ERROR: MESSAGE: \[Library not found \!\]
Line not found: ERROR: MESSAGE: \[File not found \!\]
Found line: ERROR: MESSAGE: \[Path not found \!\]
Line not found: ERROR: MESSAGE: \[Permission denied \!\]
bash-3.2$ 
bash-3.2$echo$conf_路径;cat$conf_路径
config.txt
错误:消息:\[找不到库\!\]
错误:消息:\[未找到文件\!\]
错误:消息:\[未找到路径\!\]
错误:消息:\[权限被拒绝\!\]
bash-3.2美元
bash-3.2$echo$log\u路径;cat$log\U路径
log.txt
信息:消息:脚本启动
信息:消息:一些命令输出
错误:消息:[找不到库!]
信息:消息:其他一些命令输出
错误:消息:[未找到路径!]
信息:消息:使用2退出脚本
bash-3.2美元
bash-3.2$while read-r行;如果grep-q“${line}”$log\u路径;然后回显“找到行:$line”>>$out\u log;else echo“未找到行:$Line”>>$out\u log;fi;完成<$conf_路径
bash-3.2美元
bash-3.2$echo$out\u log;cat$out_日志
输出\u log.txt
找到行:错误:消息:\[找不到库\!\]
未找到行:错误:消息:\[未找到文件\!\]
找到行:错误:消息:\[未找到路径\!\]
未找到行:错误:消息:\[权限被拒绝\!\]
bash-3.2美元
希望这有帮助。祝你好运

试试下面

代码:

while read -r line
do if grep -q "${line}" $log_path
then  echo "Found line: $line" >> $out_log
else echo "Line not found: $line" >> $out_log
fi
done < $conf_path
bash-3.2$ echo $conf_path ; cat $conf_path
config.txt
ERROR: MESSAGE: \[Library not found \!\]
ERROR: MESSAGE: \[File not found \!\]
ERROR: MESSAGE: \[Path not found \!\]
ERROR: MESSAGE: \[Permission denied \!\]
bash-3.2$ 
bash-3.2$ echo $log_path; cat $log_path
log.txt
INFO: MESSAGE: Script Starts
INFO: MESSAGE: Some command output
ERROR: MESSAGE: [Library not found !]
INFO: MESSAGE: Some other command output
ERROR: MESSAGE: [Path not found !]
INFO: MESSAGE: Exit script with 2
bash-3.2$ 
bash-3.2$ while read -r line; do if grep -q "${line}" $log_path; then  echo "Found line: $line" >> $out_log; else echo "Line not found: $line" >> $out_log; fi; done < $conf_path
bash-3.2$ 
bash-3.2$ echo $out_log; cat $out_log
output_log.txt
Found line: ERROR: MESSAGE: \[Library not found \!\]
Line not found: ERROR: MESSAGE: \[File not found \!\]
Found line: ERROR: MESSAGE: \[Path not found \!\]
Line not found: ERROR: MESSAGE: \[Permission denied \!\]
bash-3.2$ 
读取时-r行
如果grep-q“${line}”$log\u路径
然后回显“找到行:$line”>>$out\u log
else echo“未找到行:$Line”>$out\u log
fi
完成<$conf_路径
示例:

while read -r line
do if grep -q "${line}" $log_path
then  echo "Found line: $line" >> $out_log
else echo "Line not found: $line" >> $out_log
fi
done < $conf_path
bash-3.2$ echo $conf_path ; cat $conf_path
config.txt
ERROR: MESSAGE: \[Library not found \!\]
ERROR: MESSAGE: \[File not found \!\]
ERROR: MESSAGE: \[Path not found \!\]
ERROR: MESSAGE: \[Permission denied \!\]
bash-3.2$ 
bash-3.2$ echo $log_path; cat $log_path
log.txt
INFO: MESSAGE: Script Starts
INFO: MESSAGE: Some command output
ERROR: MESSAGE: [Library not found !]
INFO: MESSAGE: Some other command output
ERROR: MESSAGE: [Path not found !]
INFO: MESSAGE: Exit script with 2
bash-3.2$ 
bash-3.2$ while read -r line; do if grep -q "${line}" $log_path; then  echo "Found line: $line" >> $out_log; else echo "Line not found: $line" >> $out_log; fi; done < $conf_path
bash-3.2$ 
bash-3.2$ echo $out_log; cat $out_log
output_log.txt
Found line: ERROR: MESSAGE: \[Library not found \!\]
Line not found: ERROR: MESSAGE: \[File not found \!\]
Found line: ERROR: MESSAGE: \[Path not found \!\]
Line not found: ERROR: MESSAGE: \[Permission denied \!\]
bash-3.2$ 
bash-3.2$echo$conf_路径;cat$conf_路径
config.txt
错误:消息:\[找不到库\!\]
错误:消息:\[未找到文件\!\]
错误:消息:\[未找到路径\!\]
错误:消息:\[权限被拒绝\!\]
bash-3.2美元
bash-3.2$echo$log\u路径;cat$log\U路径
log.txt
信息:消息:脚本启动
信息:消息:一些命令输出
错误:消息:[找不到库!]
信息:消息:其他一些命令输出
错误:消息:[未找到路径!]
信息:消息:使用2退出脚本
bash-3.2美元
bash-3.2$while read-r行;如果grep-q“${line}”$log\u路径;然后回显“找到行:$line”>>$out\u log;else echo“未找到行:$Line”>>$out\u log;fi;完成<$conf_路径
bash-3.2美元
bash-3.2$echo$out\u log;cat$out_日志
输出\u log.txt
找到行:错误:消息:\[找不到库\!\]
未找到行:错误:消息:\[未找到文件\!\]
找到行:错误:消息:\[未找到路径\!\]
未找到行:错误:消息:\[权限被拒绝\!\]
bash-3.2美元

希望这有帮助。祝你好运

那么,在您当前的脚本中有什么不起作用,错误消息是什么?我真的不知道。似乎我的grep条件总是返回false,因此总是调用
else
语句。但是我尝试使用非常相似的grep,它返回了find行。请您提供一个最小的可复制示例,其中包含一些导致脚本失败的数据,因为在尝试时它对我有效:“break”意味着在第一次成功查找后停止循环。如果替换为“continue”,循环将读取$conf_path中的下一行。另外,尝试替换为grep-q“${line}”“${log_path}”下一行,那么在当前脚本中有什么不起作用,错误消息是什么?我真的不知道。似乎我的grep条件总是返回false,因此总是调用
else
语句。但是我尝试使用非常相似的grep,它返回了find行。请您提供一个最小的可复制示例,其中包含一些导致脚本失败的数据,因为在尝试时它对我有效:“break”意味着在第一次成功查找后停止循环。如果替换为“continue”,循环将从$conf_path读取下一行。另外,尝试替换为下面的grep-q“${line}”“${log_path}”
“${line}”
这是正确工作的关键。谢谢你,先生“${line}”这是正确工作的关键。谢谢你,先生