2013-10-27 2 views
1

아래 예제를 사용하여 "\ n \ nbeer/name :"을 "|" 문자 :Perl 개행 바꾸기

beer/name: The Horseman's Ale 
beer/beerId: 33061 
beer/brewerId: 14359 
beer/ABV: 5.20 

beer/name: blah beer 
beer/beerId: 33045 
beer/brewerId: 14678 
beer/ABV: 5.98 

... 

다음 작업을 시도하지만 전체 파일을 삭제합니다. 여기

perl -pi -0 -w -e "s,\nbeer/name,|,g" file.txt 

오류가 나는 얻을 수있다 :

Substitution loop at -e line 1, <> chunk 1. 

어떻게이 코드 작업을 수정할 수 있습니다?

+2

나는 당신의 문제를 재현 할 수 있습니다. 내 시스템에서 파일은 * 삭제되지 * 않습니다. –

+0

감사합니다. 나는 "파일의 모든 내용이 삭제되었습니다"라고 말했어야합니다. 실제 파일은 남아 있으며 내용이 없습니다. – user2896837

+1

나는 같은 대답을해야합니다. 우리 시스템에서 빈 줄과'beer/name'은'|'로 대체되고 나머지 파일 내용은 그대로 유지됩니다. –

답변

0

이 질문에 답변하지 않지만 작업 파일을 보존하는 데 도움이됩니다.

파일이 "삭제되거나 지워지지"않게하려면 -i 스위치에 백업 접미사를 추가 할 수 있습니다. 그러면 원본 파일이 지정된 확장자로 저장됩니다.

perlrun 가입일

-i [확장]

가 <>에 의해 처리되는 파일을 수정할 때 사용한다. 이것은 입력 파일의 이름을 바꾸고 출력 파일을 원래 이름으로 열고 print() 문의 기본값으로 출력 파일을 선택하여 수행합니다. 공급하면 확장은, 이러한 규칙에 따라 백업 복사본을 만들기 위해 이전 파일의 이름을 변경하는 데 사용됩니다 ... 내가 바로 당신의 필요를 이해 확실하지 않다

1

하지만

나는이 방법이 테스트 :

perl -0pwe "s,\nbeer/name,|,g" <<<"beer/name: The Horseman's Ale"$'\nbeer/beerId: 33061\nbeer/brewerId: 14359\nbeer/ABV: 5.20\n\nbeer/name: blah beer\nbeer/beerId: 33045\nbeer/brewerId: 14678' 

명령 줄에서.

출력 :

beer/name: The Horseman's Ale 
beer/beerId: 33061 
beer/brewerId: 14359 
beer/ABV: 5.20 
|: blah beer 
beer/beerId: 33045 
beer/brewerId: 14678 

cat하여 펄 부분을 교체 테스트 흐름을 보장 :

cat <<<"beer/name: The Horseman's Ale"$'\nbeer/beerId: 33061\nbeer/brewerId: 14359\nbeer/ABV: 5.20\n\nbeer/name: blah beer\nbeer/beerId: 33045\nbeer/brewerId: 14678' | sed 's/^/ /' 

출력 :

beer/name: The Horseman's Ale 
beer/beerId: 33061 
beer/brewerId: 14359 
beer/ABV: 5.20 

beer/name: blah beer 
beer/beerId: 33045 
beer/brewerId: 14678 

그래서 거기에서 나는 을 명중 easely 수, Ctrl + 및 사용 는 + Ctrl 키 바로, , 을 왼쪽에서 오른쪽 라인을 수정할 수있는 위치에 도달하기 + 및/또는 Ctrl 키를 왼쪽으로 ...

perl -0pwe '...' -i.bak path/filename 

또는 펄 스크립트를 만들 : 당신은 출력이 당신의 필요에 맞는, 당신은 간단하게 당신의 switchs를 대체 할 수있어 일단

perltidy <<< 's,\nbeer/name,|,g' 

sed '1i#!/usr/local/bin/perl -0pwi.bak\nuse strict;' <(
    perltidy <<< 's,\nbeer/name,|,g') >myscript.pl 
관련 문제