从文件名复制并插入文件

时间:2019-03-10 09:22:24

标签: php regex match sh

我有一个包含不同文件的文件夹,但是所有文件都包含带有不同单词的方括号。 例如:From-The-(Far)-East.html和From-The-(near)-West.html

是否可以在“ body”标签之间使用特殊标签将方括号的内容复制到文件中,并在插入后删除方括号? 例如:From-The-(Far)-East.html->复制“ Far”,然后将带有标签<test>brackets=Far</test>的标签插入到<body>...</body>之间的文件中? ->之后,文件名应为From-The--East.html(对于多个文件,则为此名称)

我认为可以使用某些正则表达式来匹配/复制方括号的内容,然后使用“ fopen”将其插入,然后重命名文件。如果有人可以帮助我,那会很好。 (也许有人知道如何使用Shell脚本进行管理)

谢谢

2 个答案:

答案 0 :(得分:0)

这个怎么样?

$di = new DirectoryIterator($inputpath);
foreach ($di as $file) {
    if ($file->isFile() && $file->isReadable()) {
        $namePart = '';
        if (preg_match('/\((.*)\)/', $file->getFilename(), $namePart) === false) {
            continue;
        }

        $content = file_get_contents($file->getPathname());
        $content = str_replace('<body>', '<body><test>' . $namePart[1] . '</test>', $content);
        file_put_contents($file->getPathname(), $content);

        $newFilename = str_replace($namePart[0], '', $file->getPathname());
        rename($file->getPathname(), $newFilename);
    }
}

它遍历$inputpath中的所有文件 如果文件是文件并且可读,它将通过正则表达式尝试匹配。 $namePart中的结果应等于['(Far)', 'Far'](根据您的示例)。

然后将名称插入文件。我知道我使用了一个哑函数;但是它可以满足您的要求。

将字符串插入文件后,它将更改文件名。

答案 1 :(得分:0)

这可以通过gawk(在Linux上)完成

创建一个名为“ rename.awk”的文件:

x==1{ print "<test>brackets=" b "</test>" >newFilename; x=0 }
NR==1 { split(FILENAME,a,/[()]/); b=a[2];  newFilename = a[0] a[1] a[3] a[4] }
/<body/{ x=1 }
{ print $0 >newFilename }

$ gawk -f named.awk“发件人-(远)-East.html”

在此之后,您应该拥有:

$ cat "From-The--East.html"
<html>
<head>
<title>From-The-(Far)-East.html</title>
</head>
<body>
<test>brackets=Far</test>
From-The-(Far)-East.html
</body>
</html>

(至少如果原始文件看起来像这样:

$ cat "From-The-(Far)-East.html"
<html>
<head>
<title>From-The-(Far)-East.html</title>
</head>
<body>
From-The-(Far)-East.html
</body>
</html>