Bash Can';t根据分隔符拆分文本文件

Bash Can';t根据分隔符拆分文本文件,bash,ubuntu,split,Bash,Ubuntu,Split,我正在运行Ubuntu 18.04 LTS。我有一个名为“group_keys”的文本文件,其中包含许多公钥,我想根据分隔符拆分这些公钥 -----BEGIN PUBLIC KEY----- 然后分别按顺序输出每个键。例如,如果有三个键,那么输出将是三个文件,名称为“person_1_key”、“person_2_key”和“person_3_key” 该文件如下所示: 我在使用split和csplit执行此操作时遇到困难。我输入的命令不起作用。这是我尝试过的 使用拆分: 这并没有输出任何东

我正在运行Ubuntu 18.04 LTS。我有一个名为“group_keys”的文本文件,其中包含许多公钥,我想根据分隔符拆分这些公钥

-----BEGIN PUBLIC KEY-----
然后分别按顺序输出每个键。例如,如果有三个键,那么输出将是三个文件,名称为“person_1_key”、“person_2_key”和“person_3_key”

该文件如下所示:

我在使用
split
csplit
执行此操作时遇到困难。我输入的命令不起作用。这是我尝试过的

使用拆分: 这并没有输出任何东西,而是给了我信息

split: multi-character separator ‘-----BEGIN PUBLIC KEY-----’
使用csplit: 这只给了我两个文件,“xx00”和“xx01”,但它没有分割行。“xx00”完全为空,“xx01”只是原始文件。

这应该可以:

awk'/----开始公钥----/{n++}{print>“个人密钥”}组密钥

尝试

csplit -z -f person_ -b '%d_key' group_keys '/-----BEGIN PUBLIC KEY-----/' '{*}'
这将输出四个文件
person\u 0\u key
person\u 1\u key
person\u 2\u key
person\u 3\u key
,其中

  • -z
    禁止生成空文件
  • -f person
    设置输出文件名前缀
  • -b“%d_key”
    设置输出文件名后缀
  • “{*}”
    设置重复计数(尽可能多地重复)

是的,这确实有效!非常感谢你。但是,你能解释一下使用的一些语法吗?特别是用括号括起来的文本。我不熟悉AWK。那些是正则表达式吗?
csplit group_keys "-----BEGIN PUBLIC KEY-----"
csplit -z -f person_ -b '%d_key' group_keys '/-----BEGIN PUBLIC KEY-----/' '{*}'