我有几个包含一些 PHP 的文件include
,我想用文件内容替换它们。该文件看起来像
foo
<?php
include("file1.php");
?>
bar
baz
<?php
include("file2.php");
include("file3.php");
?>
more content
因此,afterfoo
应该是 file1.php 的内容,afterbaz
应该是 file2.php 的第一个内容,然后是 file3.php。我还想删除这两种情况下的<?php
和标签。?>
有什么好的方法可以解决这个问题吗?
假设以下文件内容:
file1.php
: 是空的file2.php
:<p>Hello
file3.php
:World</p>
所以生成的文件应该如下所示:
foo
bar
baz
<p>Hello
World</p>
more content
单词foo
等bar
只是真实文件中的咒骂语,可以有任何文本。
答案1
无论如何,这些都是 PHP 替代品,所以只需通过 php 运行它:
$ php file-main.php
foo
bar
baz
<p>Hello
World</p>
more content
$ php file-main.php > file-main-new.php
答案2
awk 包装:
awk '
/</ || /\?>/ {next;}
/include/ {
if (match($0,"\".*php")){
f = substr($0,RSTART+1,RLENGTH-1);
while ( getline < f ){
print;
}
}
next;
}
{print;}
' YOURFILE
可以嵌入到 shell 中,修改你的单行代码,或者保存到 awk 脚本中(推荐)...
答案3
k=1
while read line
do
if [[ "${line}" == "<?php" ]] || [[ "${line}" == "?>" ]]; then
:
elif [[ "${line}" =~ "include" ]]; then
((k++))
file=$line
while read include_line
do
echo $include_line | grep -Ev '<\?php|\?>' >> newfile.php
done <${file:9:9}
# cat file$k.php >> newfile.php
else
echo $line >> newfile.php
fi
done </tmp/inputfile
答案4
对于这个问题,会有更好的 awk、sed、perl 解决方案。但我给出了一个vim
可以在这里使用的简单编辑技巧,用于将文件的内容插入到其他文件中。
- 删除
<?php
和?>
标签。 - 删除该
include
行,然后使用 插入文件的相应内容:r file1.php
。这会将文件的内容插入file1.php
到光标的下一行。 - 对其他此类语句重复这些步骤
include
。
例子
$ cat file1.txt
This is a content in file1.
屏幕截图显示了更改
的内容file1.txt
被放置在mainFile.txt
您可以:r
在 vim 帮助中查看更多信息或这个参考链接。