我正在尝试使用bash将.php文件拆分为几个部分,但似乎无法找到一种基于标头将其拆分的方法。
我不会在.php文件中进行任何更改,而只是从中获取信息。
我已经考虑使用split
,但似乎没有我想要的属性。
例如,文件的行为如下:
'Josh-per' => array(
Height=60
Weight=90
Age=20
),
'Katie-per' => array(
Height=55
Weight=110
Age=45
#...etc
这不是确切的代码,但是更基本,但是保留了相同的想法。每个“名称”以-per结尾,然后在其中保存与该人有关的信息。
我想要做的是将每个Array转换成自己的文件,分别名为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
总而言之,我要做的是将Josh-per
放入名为Josh.sources
的新文件中,并将Katie-per
放入Katie.sources
答案 0 :(得分:0)
您无需使用bash进行拆分,可以在仍在PHP中的情况下进行拆分。
在假设您所显示的内容不是数组的情况下进行操作(因为它的格式不像php中的适当数组)。
// $string is where you're getting this particular formatted information.
$pieces = explode ($newstring, ',');
// $piece[0] and $piece[1] will now give you each value.
如果您拆分的实际上是多维数组,则应采用以下格式:
$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进行拆分,则PHP在打印数组时会使用逗号来分隔字段。通常,这应该影响所有字段,但是您所显示的示例仅在多维数组的较高级别上发生(可能表示稍后需要修复的错误,但目前,它对您有利)为您提供可靠的分度数为此,这里有一个建议的解决方案:
How do I split a string on a delimiter in Bash?
# after you take your input into PERSON
while IFS=',' read -ra PERSON; do
for i in "${PERSON[@]}"; do
# process "$i"
done
done <<< "$IN"
# do what you do with your array
,而您只是用逗号分开。这将为您的输出提供以下格式:
'Josh-per' => array(
Height=60
Weight=90
Age=20
)
这时,您将需要进行两次以上的“按距离拆分”。一次在“(”上,获取之后的内容,然后再次在“)”上,获取之前的内容。然后输出,您已经有了文件。
答案 1 :(得分:0)
这个正在使用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