是否可以根据标题将.php文件拆分为多个单独的部分?

时间:2019-04-29 17:42:05

标签: bash sh

我正在尝试使用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.fooKatie.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

2 个答案:

答案 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 ...

如果必须使用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