我在unix中有一个日志文件,其中包含从所有用户生成的所有致命日志的信息。
我正在尝试从此文件中读取密钥信息。
关键是(用户ID)致命发生的地方和(消息)致命原因
我想逐行读取文件,grep读取该行中的模式,如果该行存在,则将其写入新文件。
我尝试使用以下代码
for file in `cat fatalLogInfo.txt`
do
grep -i "User Id========*" $file >>abcd1.txt
grep -i "Message" $file >>abcd1.txt
done
请纠正我。
答案 0 :(得分:1)
我认为你可以一气呵成,就像这样:
egrep -hi "User ID=====|Message" $(cat fatalLogInfo.txt) > abcd1.txt
我使用egrep
,因此您可以使用竖线符号(|
)来搜索两个内容之一 - 即User Id===
或Message
。我添加-h
来阻止grep
打印文件名,因为当你传递多个文件进行搜索时它会执行。然后我使用$()
来表示“运行命令的输出在支架内“。由于大括号内的命令打印文件名列表,$()
只是将文件名列表传递给grep
命令,以便搜索。
这种方法的优点是您不必为每个文件执行grep
的全新流程。
答案 1 :(得分:0)
使用while循环:
while read -r line
do
#do whatever want with the line
part=$(grep -oP 'regex' <<<"$line") # and such
done < fatalLogInfo.txt
不知道确切的结构是不可能给出更好的答案。