regex - 将文件分成多个文件

标签 regex bash

我有一个以下格式的大文件:

From fc2868d745defcc4deb0ebdce8fe8dac78b447ea Mon Sep 17 00:00:00 2001
From: email address
message content

From 39a833c2f01030619629daa3b613e3985b2e4e7a Mon Sep 17 00:00:01 2001    
From: email address
message content

From 833c2f01030619629daa3b613e3985b2e4e7a427 Mon Sep 17 00:00:01 2001
From: email address
message content

我想将文件拆分为多个文件,因此第一个文件包含

    From fc2868d745defcc4deb0ebdce8fe8dac78b447ea Mon Sep 17 00:00:00 2001
    From: email address
    message content

下一个文件包含下一部分。

决定下一个文件的键是“From [a-z][0-9]”

所以“来自太空的一些字母/数字”

消息内容多行,最多1000行

有什么想法如何在 bash 中做到这一点吗?

包含 3 条消息的示例:http://pastebin.com/xWmuzfRC

最佳答案

#script 20151110f.sh  
#input file: 20151110f.dat  
#usage bash 20151110f.sh 20151110f.dat  

inf=$1 # source file  
num=1
while read -r line  
do
    echo "$line" | grep -q "From [a-z0-9]" # check if a new message  
    if [ $? -eq 0 ]
    then
        file="file"${num}.dat
        echo "$line" > $file
        num=$((num + 1))  #inc so that next file name will be one higher  
    else
        echo "$line" >> $file
    fi
done < "$inf"

关于regex - 将文件分成多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33636229/

相关文章:

linux - 调用未安装的例程时 Shell 脚本不会失败

bash - 在 Docker 容器启动时启动 bash 脚本不起作用

bash - 如何使用 Bash 命令计算圆周率

python - 从字符串中提取坐标

php - 用 BR 标签替换换行符,但只在 PRE 标签内

python - 在 Python 中使用正则表达式进行标记化

python - 在 Notepad++ 中的匹配模式之前添加具有特定模式的新行

javascript - 从范围中排除某些字符 - javascript 正则表达式

bash - 删除除两个文件之外的所有内容

linux - 通过变量访问 bash 位置参数