将两个greps的输出合并为一个文件

时间:2017-12-15 17:20:22

标签: linux bash shell terminal command-prompt

所以我有以下两个命令:

grep 'substring1' file1.txt > outfile.txt
grep 'substring2' file2.txt > outfile.txt

我想将两个greps合并在一起,并将它们全部写入outfile.txt作为一个命令。这样的命令怎么样?

3 个答案:

答案 0 :(得分:4)

两种可能性:

  • 将它们分组:

    {
        grep 'substring1' file1.txt
        grep 'substring2' file2.txt
    } > outfile.txt
    

    或内联为:

    { grep 'substring1' file1.txt; grep 'substring2' file2.txt; } > outfile.txt
    

    (注意结束大括号前的分号)。

  • 使用appending redirection operator >>进行第二次重定向:

    grep 'substring1' file1.txt > outfile.txt
    grep 'substring2' file2.txt >> outfile.txt
    

考虑到文件只打开一次,分组方法更可取。如果你需要做一些会在两个grep之间写入stdout的东西,那么第二种方法更可取。

答案 1 :(得分:3)

您可以轻松地将两个命令组合在一起,例如:

type TalkData struct {
  Id           int           `json:"talk_id"`
  ReceiverId   int           `json:"receiver_id"`
  ReceiverName string        `json:"receiver_name"`
  SenderId     int           `json:"sender_id"`
  Messages     []TalkMessage `json:"talk_messages"`
}

type TalkMessage struct {
  Id       int    `json:"message_id"`
  Body     string `json:"body"`
  SendDate string `json:"send_date"`
  SenderId int    `json:"sender_id"`
  TalkId   int    `json:"talk_id"`
}

talkData := &TalkData{}
err := json.Unmarshal([]byte(data), &talkData)
if err != nil {
  // Handle err...
}

for i, message := range talkData.Messages {
  // Process message...
}

“;”将两个命令分开后,第二个命令将在第一个命令完成后执行。

“>>”表示您将输出附加到现有文件。 (如果文件不存在,则“>”)

没有区别

您可以将此简单模式用于许多不同的任务。

答案 2 :(得分:2)

嗯,首先,你列出这些命令的方式,它们将无法完成。 你还没有提供文件名,因此,grep会使用stdin,除非你给它一些输入,否则它会阻塞。

说完了....

如何在一个命令中完成所有操作?

egrep 'substring1|substring2' source_file.txt > outfile.txt

egrep允许匹配多个搜索字符串,由' |'提交。

希望有所帮助。