2014-02-27 2 views
0

perl을 사용하여 파일을 하나씩 삽입하는 지루한 과정을 거치지 않고 헤더 파일을 삽입하는 명령 줄을 발견했습니다. 누군가이 명령 행의 perl 측면을 통해 나를 걸을 수 있습니까? 나는 이것에 익숙하지 않고 내가 쓴 것에 대한 올바른 설명을 찾지 못하는 것 같습니다. 감사!perl을 사용하여 여러 파일에 헤더 삽입

cat header.txt | perl -0 -i -pe 'BEGIN {$ h =}; print $ h '1 *

+3

'perldoc perlrun' – toolic

+0

실제로 작동합니까? BEGIN 블록 안의 문법이 틀린 것처럼 보입니다. –

+0

그래, 달려 들었다. – Rebecca

답변

1

welcome to stackoverflow! 하는 xxxx.pl 파일에서 스크립트를 제공

-p 이 다소처럼이 나오지 파일 이름 인수를 반복하게 명령 행에 제공뿐만 아니라 $의 내용을 인쇄하기보다는

-e _에서 스크립트의 끝.

두 위

-i -pe에 결합이 곳에서 파일을 편집하고 같은 파일에 출력을 기록 할 나타냅니다. 실제로, Perl은 입력 파일의 이름을 변경하고이 이름이 바뀐 버전에서 읽으면서 원래 이름으로 새 파일에 기록합니다.

-0 은 전체를 읽을 수 있도록 레코드 문자의 끝을 기본값으로 다시 정의합니다 입력 파일을 한 줄로 입력하십시오.

1 * 은 스크립트의 명령 줄 인수이므로 1로 시작하는 이름의 파일을 수정하고있는 것 같습니다 (* .c 또는 기타에 따라 사용할 수 있음). 수정하려는 파일 유형)

print $ h 은 스크립트의 "기본"변수 인 $ h를 출력합니다. 헤더 파일의 내용 (이 한 줄의 의도)으로 초기화 된 경우 헤더 파일을 인쇄합니다.

BEGIN {some code here} 이것은 스크립트가 시작되기 전에 실행하는 내용입니다. 여기가 내가 곤두박질 친다. 이

그래서 기본적으로 유효 펄 코드처럼 보이지 않는다 : - 이상 모든 반복 - 이것은 BEGIN 블록에 (때문에 -0) 전체 헤더 파일을 후루룩 소리 내며 먹기와 변수 $ 시간 에 저장 가정합니다 명령 행 끝의 와일드 카드로 지정된 파일 - 각 파일에 대해 : 헤더를 인쇄하고 ($ h 인쇄) hte 파일 자체를 인쇄합니다 (-pe 때문에)

그래서 스크립트를 철자하는 것과 같습니다.

$h = gets content of the entire header file 
while (<>){ #loop implied by -pe, iterates over all the 1* files 
    # the main contents of the "-e" script are inserted below as part of executing -pe 
    print h$; #print the header we saved 
    print $_; # implied by -pe, and since we are using -0, this prints the entire content in one shot 
    # end of the "-e" script. again it was a single print $h statement, the second print is implied by -pe 
} 

설명하기가 약간 어렵습니다. 자세한 내용은 lrun 설명서를 참조하십시오.

이것은 BEGIN 블록이 옳다고 생각하지 않기 때문에 100 % 완전한 설명이 아닙니다. 내 우분투 컴퓨터에서 그것을 시도하고 그것의 구문에 대해서도 불평했다

+0

와우는 나에게 모든 것을 설명하는 시간을내어 주셔서 대단히 감사합니다! 이것은 훌륭합니다! :영형) – Rebecca

관련 문제