所以我有以下两个命令:
grep 'substring1' file1.txt > outfile.txt
grep 'substring2' file2.txt > outfile.txt
我想将两个greps合并在一起,并将它们全部写入outfile.txt作为一个命令。这样的命令怎么样?
答案 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
允许匹配多个搜索字符串,由' |'提交。
希望有所帮助。