我有一个包含不同文件的文件夹,但是所有文件都包含带有不同单词的方括号。 例如: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脚本进行管理)
谢谢
答案 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>