Bash 是否可以基于头将.php文件拆分为单独的部分?

Bash 是否可以基于头将.php文件拆分为单独的部分?,bash,sh,Bash,Sh,我正试图使用bash将一个.php文件拆分为几个部分,但我似乎无法找到一种基于头将其拆分的方法 我不会更改.php文件中的任何内容,只是从中获取信息 我已经研究过如何使用split,但它似乎没有我想要的属性 例如,该文件的行为如下所示: 'Josh-per' => array( Height=60 Weight=90 Age=20 ), 'Katie-per' => array( Height=55 Weight=110 A

我正试图使用bash将一个.php文件拆分为几个部分,但我似乎无法找到一种基于头将其拆分的方法

我不会更改.php文件中的任何内容,只是从中获取信息

我已经研究过如何使用
split
,但它似乎没有我想要的属性

例如,该文件的行为如下所示:

'Josh-per' => array(
     Height=60
     Weight=90
     Age=20
),
'Katie-per' => array(
     Height=55
     Weight=110
     Age=45

#...etc
$pieces = array('Josh-per' => array(
     Height => 60,
     Weight => 90,
     Age => 20
),
'Katie-per' => array(
     Height => 55,
     Weight => 110,
     Age=45 );

#...etc
这不是确切的代码,但更基本,但保留了相同的想法。每个“名称”以-per结尾,然后在其中保存与该人相关的信息

我希望它能将每个数组转换成自己的文件,名为
Josh.foo
Katie.foo

内在的

Height=60
Weight=90
Age=20
=========================

好吧,一开始我有点困惑,我会尝试补救,但无论如何我会保留旧的,以防万一

因此,我得到了一个包含多个类的.php,以$NAME per开头,但它在文件中不是唯一的。我不会改变.php中的任何内容,因为它是自动生成的,包含的信息比我现在介绍的要多得多

下面是文件中内容的更好表示形式,名为
sources.php

<?php
$config = array(

'Josh-per' => array(
     'certificate' => 'null.cert',
     'key' => 'something-per.key',
     'site' => 'website.com',
),
'Katie-per' => array(
     'certificate' => 'notnull.cert',
     'key' => 'testkey.key',
     'site' => 'fakesite.com'
#...etc

您不需要使用bash进行拆分,您可以在bash仍在PHP中时进行拆分

如果要拆分的是字符串: 假设您显示的不是数组(因为它的格式不像php中的正确数组)

如果这是一个数组。。。 如果要拆分的实际上是多维数组,则其格式应如下所示:

'Josh-per' => array(
     Height=60
     Weight=90
     Age=20
),
'Katie-per' => array(
     Height=55
     Weight=110
     Age=45

#...etc
$pieces = array('Josh-per' => array(
     Height => 60,
     Weight => 90,
     Age => 20
),
'Katie-per' => array(
     Height => 55,
     Weight => 110,
     Age=45 );

#...etc
在这一点上,它已经分裂了

// $pieces[0] and $pieces[1], etc.
如果你必须从打印出来的内容中拆分Bash。。。 如果必须使用bash进行拆分,PHP在打印数组时会使用逗号来删除字段。通常情况下,这会影响所有字段,但您所展示的示例仅在多维数组的更高级别上发生(可能表示稍后需要修复的错误,但目前,它通过为您提供一个可靠的delimeter对您有利。对于此,这里建议了一个解决方案:


此时,您需要在delimeter上再进行两次拆分。一次在“(“然后再进行后续操作,并再次显示结果”)”然后输出你的文件。

这一个使用的是
awk
:这里
filename
是输入文件的名称。正如你提到的,这不是实际输入,因此你可能需要根据实际输入调整列数

awk -v RS=")," '{$1=$1}1' filename |awk -v FS="[-' ]"   -v OFS="\n" 'length($2){print  $7, $8, $9 > $2".foo"}' 


 -->cat Josh.foo
Height=60
Weight=90
Age=20

 -->cat Katie.foo
Height=55
Weight=110
Age=45

-per
是一个唯一的子字符串,它将始终包含在应该启动新文件的行中而且不存在于任何其他行中?在我的特定情况下,不存在。在某些情况下,它会链接到另一个人,例如#…Age=20 Friend=Katie per…#@Martin我可以将.php转换为.txt以使其更简单,但应该使用bash完成。@tripleee我认为Kazken的答案不符合重复的条件。您链接的答案不是o特别要求一个正则表达式解决方案,这一个不需要正则表达式。通过指向一个特定于正则表达式的解决方案,你更有可能在不需要正则表达式的时候把人们带到正则表达式的兔子洞里。显然OP根本就不特别有兴趣使用PHP来实现这一点,正则表达式将是相当琐碎的他说,我认为它采用了正确的数组格式(我通常不使用PHP)但我可以将文件转换成.txt,因为我不会编辑其中的任何内容。所有信息都是自动生成的,我正在尝试制作一个脚本,将其拆分为单独的文件,以便我可以在这些文件上运行代码。啊,你可能想修改你的问题,说明你当时没有修改php。我刚刚更新了它,谢谢。抱歉,这有点cOnFusing只要你学会了,你就是stackoverflow新手。问题的清晰性是非常重要的。:)哦,记住投票给那些帮助你的人,他们不会给出非常糟糕的答案,即使他们不是你选择的人(你选择正确的人会得到更多的分数。)
awk -v RS=")," '{$1=$1}1' filename |awk -v FS="[-' ]"   -v OFS="\n" 'length($2){print  $7, $8, $9 > $2".foo"}' 


 -->cat Josh.foo
Height=60
Weight=90
Age=20

 -->cat Katie.foo
Height=55
Weight=110
Age=45