我有以下sed命令将文件分成两部分:
sed -n '1,/(-!-)/{/(-!-)/!p}' file.temp file1.txt
sed -n '/(-!-)/,${/(-!-)/!p}' file.temp file2.txt
该文件类似于123( - ! - )321
我得到了这个结果:
文件1: 123
file2的: 321
这个效果很好,但我希望它分成4个文件,这意味着我将使用3个分隔符
有人可以给我一些关于如何做的提示吗?
答案 0 :(得分:6)
sed
可能不适合这项工作。另一方面,awk
能够分割任意正则表达式的记录,最终使这很容易。首先,这是从文件中提取特定部分的方法。
鉴于此输入:
this is section 1
(-!-)
this is section 2
(-!-)
this is section 3
我们可以像这样提取第三部分:
awk -vRS='\n[(]-!-[)]\n' 'NR==3 {print}' file.temp
这给了我们:
this is section 3
在此命令中,我们将awk的记录分隔符(RS
变量)设置为与文件中的分隔符匹配的正则表达式。通常,awk
使用换行符作为记录分隔符,因此每行都是新记录。通过明确地将RS
设置为此正则表达式,我们将awk
视为单个实体。
您可以将每个部分提取到一个单独的文件中:
awk -vRS='\n[(]-!-[)]\n' -vprefix="file" '{print > prefix NR}' file.temp
这将为您提供文件file1
,file2
和file3
作为输出,每个文件都包含相应部分的内容。文件名是根据“prefix”变量的值(由-vprefix="file"
选项设置)和当前记录号生成的。
答案 1 :(得分:1)
这可能对您有用:
cat <<! >file.temp
> aaa
> (-!-)
> bbb
> (-!-)
> ccc
> (-!-)
> ddd
> !
csplit -n1 -ffile file.temp '/(-!-)/' '{*}'
sed -i '/(-!-)/d' file?