Unix命令写特定模式

时间:2014-09-09 16:48:19

标签: shell unix

我在unix中有一个日志文件,其中包含从所有用户生成的所有致命日志的信息。

我正在尝试从此文件中读取密钥信息。

关键是(用户ID)致命发生的地方和(消息)致命原因

我想逐行读取文件,grep读取该行中的模式,如果该行存在,则将其写入新文件。

我尝试使用以下代码

for file in `cat fatalLogInfo.txt`
do
        grep -i "User Id========*" $file >>abcd1.txt
        grep -i "Message"        $file >>abcd1.txt
done

请纠正我。

2 个答案:

答案 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

不知道确切的结构是不可能给出更好的答案。