使用分隔符分隔Sed文件

Kil*_*ode 1 shell sed

我有以下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个分隔符

有人能给我一个关于如何做的暗示吗?

lar*_*sks 5

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,file2file3作为输出,每个都包含相应部分的内容.文件名是根据"前缀"变量(由-vprefix="file"选项设置)的值和当前记录号生成的.