我有以下sed命令将文件拆分为两个:
sed -n '1,/(-!-)/{/(-!-)/!p}' file.temp file1.txt
sed -n '/(-!-)/,${/(-!-)/!p}' file.temp file2.txt
Run Code Online (Sandbox Code Playgroud)
该文件类似于123( - ! - )321
我得到了这个结果:
file1:123
file2:321
这工作得很好,但我希望它分成4个文件,这意味着我将使用3个分隔符
有人能给我一个关于如何做的暗示吗?
sed可能不是这项工作的正确工具. awk另一方面,能够分割任意正则表达式的记录,最终使这很容易.首先,这是从文件中提取特定部分的方法.
鉴于此输入:
this is section 1
(-!-)
this is section 2
(-!-)
this is section 3
Run Code Online (Sandbox Code Playgroud)
我们可以像这样提取第三部分:
awk -vRS='\n[(]-!-[)]\n' 'NR==3 {print}' file.temp
Run Code Online (Sandbox Code Playgroud)
这给了我们:
this is section 3
Run Code Online (Sandbox Code Playgroud)
在此命令中,我们将awk的记录分隔符(RS变量)设置为与文件中的分隔符匹配的正则表达式.通常,awk使用换行作为记录分隔符,因此每行都是新记录.通过RS明确设置此正则表达式,我们awk将每个部分视为单个实体.
您可以将每个部分提取到单独的文件中,如下所示:
awk -vRS='\n[(]-!-[)]\n' -vprefix="file" '{print > prefix NR}' file.temp
Run Code Online (Sandbox Code Playgroud)
这会给你的文件file1,file2和file3作为输出,每个都包含相应部分的内容.文件名是根据"前缀"变量(由-vprefix="file"选项设置)的值和当前记录号生成的.
| 归档时间: |
|
| 查看次数: |
321 次 |
| 最近记录: |