일부 PHP가 포함된 파일이 여러 개 있고 include
이를 파일 내용으로 바꾸고 싶습니다. 파일은 다음과 같습니다
foo
<?php
include("file1.php");
?>
bar
baz
<?php
include("file2.php");
include("file3.php");
?>
more content
따라서 after는 foo
file1.php의 내용이어야 하고 after는 baz
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 '
/</ || /\?>/ {next;}
/include/ {
if (match($0,"\".*php")){
f = substr($0,RSTART+1,RLENGTH-1);
while ( getline < f ){
print;
}
}
next;
}
{print;}
' YOURFILE
이를 셸에 포함하거나, 한 줄의 코드를 수정하거나, 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 도움말에서 더 많은 정보를 볼 수 있습니다 .이 참조 링크.