여러 파일의 시작 부분에 태그를 추가하려면 어떻게해야합니까?


18

파일 주위에 PHP 태그를 추가해야합니다. 다음을 사용하여 쉽게 추가 할 수 있습니다.

find . -exec echo "?>" >> '{}' \;

하지만 내가 어떻게 할 수 붙일 태그를 <?php?

답변:


18
sed -i "1s/^/<?php /" file

(는 -i현재 위치에서 편집을위한 것입니다.)

더 휴대용 버전 :

ed file <<!
1s/^/<?php /
wq
!

멋진-그것은 내가 설명하려고했던 것보다 조금 더 쉽습니다 :)
warren

여기에 -i 인수에 확장자를 추가해야합니다. sed 또는 GNU sed를 사용하고 있습니까?

Richard : 내가 사용하고있는 것은 GNU라고 주장 sed하고 백업 접미사를 추가 할 수 있습니다.
user1686

2
BSD sed를 사용하고 있으며 편집이 가능하지만 확장 기능을 제공해야합니다. 즉 'sed -i .bak "PATTERN"파일 "

3
-i이식성이 없으며 구문은 구현마다 다르며 심볼릭 링크를 끊습니다. 실제로 파일을 편집하도록 설계된 응용 프로그램을 사용하는 것이 좋습니다.
Chris Down

5

AWK이런 필터를 사용할 수 있습니다

awk '{if (NR == 1) printf "% s % s", "PREFIX", $ 0; else $ 0} 'testfile> newfile 인쇄

PREFIXPHP 접두사 문자열은 어디에 있습니까 ?


5

아직 의견을 남길 수는 없지만 한 번에 모든 것을 할 수 있습니다.

find . -type f -exec sed -i -e "1s/^/<?php /" -e "\$s/\$/ ?>/" {} \;

그것을 사랑하고, 시간을 절약했습니다.
Steve Hill

5

펄 원 라이너로 그렇게 할 수 있습니다.

perl -0777 -p -i -e "s/^/hey /g" testfile

-0777힘은 파일 소리내어 모드를, 그래서 전체 파일은 하나의 선으로 읽습니다. -p루핑을 활성화합니다. -i파일을 내부 편집 할 수 있습니다. ^줄의 시작을 나타냅니다.

$ cp testfile1 testfile; perl -0777 -p -i -e "s/^/hey /g" testfile; diff testfile testfile1
1c1
< hey asdf
---
> asdf

업데이트 : 설명에 표시된대로 -i.bak대신을 사용하여 백업을 자동 생성하도록 선택할 수 있습니다 -i. 이것은 명령에 오류가있는 경우 추가 안전을 제공합니다. -i 백업의 접미사가 되는 인수 입니다.

많은 파일을 업데이트 할 때로 명령을 실행하고 -i.backup${RANDOM}모든 파일이 올바르게 업데이트되었는지 확인한 다음 해당 확장자를 가진 모든 파일을 제거 할 수 있습니다.


1
"값 0777은 해당 값을 가진 유효한 바이트가 없기 때문에 Perl이 파일 전체를 훔치 게
Chris W. Rea

1
-i접미사없이 플래그를 사용하도록 권장하는 경우 독자에게 백업 이 없다는 것을 경고하십시오 . 몇 문자 이상 ( -i.bak)의 경우 한 줄에 오타가 포함 된 경우 백업을받습니다. 상당히 간단한 오타 (예 : -p깃발을 잊어 버림 )는 하루 종일 망칠 수 있습니다.
Telemachus

@ Telemachus-합의. 업데이트되었습니다.

4

sed스트림 편집 용입니다. 파일이 스트림이 아닙니다. ed또는 이와 같은 목적을위한 프로그램을 사용하십시오 ex. -i에 대한 옵션 sed은 기본적으로 그것을 삭제하고 그것을 재현하기 때문에뿐만 아니라 이식 할 수 없습니다, 그것은 또한 무의미하다, 당신이 발생할 수있는 심볼릭 링크를 중단합니다.

for file in foo bar baz; do
    ed -s "${file}" << EOF
0a
<?php 
.
w
EOF
done

제시 한 것은 단일 파일을 편집하는 기본 방법입니다. 이것은 문제에 대한 답이 아닌 것 같습니다-문제는 많은 파일을 수정하는 것입니다 (처음에는 분명하지 않을 수도 있음). ed해당 용도 로 사용하는 방법을 알고 있다면 답을 제시하십시오.
rozcietrzewiacz

@rozcietrzewiacz-grawity가 단일 파일을 편집하는 동일한 방법 (수락 됨)을 보여 주었으므로 대답에 적합하다고 생각했습니다. 어느 쪽이든, 나는 그것을 루프에 넣었다.
Chris Down

0

디렉토리의 모든 파일 끝에 무언가를 추가하기 위해 작성한 것에 대한 대안 (in bash) :

for FNAME in *
do
    echo "?>" >> $FNAME
done

비록 당신의 find원 라이너를 좋아하지만 :)


$FNAME해야 $fname- 규칙에 따라, 우리는 환경 변수 (호출기, 에디터, SHELL, ...) 및 내부 쉘 변수를 대문자 (BASH_VERSION, RANDOM, ...). 다른 모든 변수 이름에는 하나 이상의 소문자가 포함되어야합니다. 이 규칙은 실수로 환경 및 내부 변수를 무시하지 않도록합니다.
Chris Down

@Chris Down-소문자, 대문자 및 낙타 :) 설정에 따라 전체 커리어가 달라진 것을 본 컨벤션 :)
warren September

카멜 케이스와 소문자는 괜찮습니다. 어느 쪽이든, 환경 변수가 아닌 변수는 전체 대문자가 아니어야합니다.
Chris Down

0

간단한 방법이 있습니다

echo "startstr$(cat filename)endstring" > filename.new

이것은 후행 줄 바꿈으로 중단됩니다.
크리스 다운

@ChrisDown 파일에서 줄 바꿈?
Hogan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.