파일의 줄을 파일 내용으로 바꾸기

파일의 줄을 파일 내용으로 바꾸기

일부 PHP가 포함된 파일이 여러 개 있고 include이를 파일 내용으로 바꾸고 싶습니다. 파일은 다음과 같습니다

foo
<?php
include("file1.php");
?>
bar
baz
<?php
include("file2.php");
include("file3.php");
?>
more content

따라서 after는 foofile1.php의 내용이어야 하고 after는 bazfile2.php의 첫 번째 내용이어야 하며 그 다음에는 file3.php의 내용이 있어야 합니다. 또한 두 경우 모두 및 태그를 제거하고 싶습니다 <?php. ?>이 문제를 해결할 좋은 방법이 있나요?

다음 파일 내용을 가정합니다.

  1. file1.php: 비었다
  2. file2.php:<p>Hello
  3. 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여기에서는 파일 내용을 다른 파일에 삽입하는 데 사용할 수 있는 간단한 편집 요령을 제공했습니다 .

  1. 삭제 <?php하고 ?>라벨을 지정하세요.
  2. 해당 줄을 삭제 include하고 :r file1.php. 그러면 file1.php커서 아래 줄에 파일 내용이 삽입됩니다 .
  3. 다른 진술에 대해서도 이 단계를 반복하십시오 include.

$ cat file1.txt
This is a content in file1.

변경 사항을 보여주는 스크린샷

앞으로

콘텐츠는 file1.txt다음 위치에 배치됩니다.mainFile.txt
뒤쪽에

:rvim 도움말에서 더 많은 정보를 볼 수 있습니다 .이 참조 링크.

관련 정보