perl을 사용하여 파일의 문자열 전부 치환하기

멀뚱이의 이미지

아래는 bom 파일의 내용입니다:

가나다라마바사
가나다라마바사
가나다라마바사
가나다라마바사
아자차카타파하
123512346가나다라마바사묘 ㅁㅁㄴㄷ곰ㄴㄷ소343762346

아래는 experiment_1.pl 의 내용입니다:

experiment_1.pl

open(FILE, "bom");
while() { $all_line .= $_; }
close(FILE);
$all_line =~ s/가나다/가세요/g;
print $all_line;

이제 소스코드를 실행해 봅니다:

$ perl experiment_1.pl
가세요라마바사
가세요라마바사
가세요라마바사
가세요라마바사
아자차카타파하
123512346가세요라마바사묘 ㅁㅁㄴㄷ곰ㄴㄷ소343762346

이제, vim, sed, awk 등을 사용하지 않고 perl로 파일의 문자들을 찾기, 바꾸기를 쉽게 할 수 있습니다. 더 강력하다고 하네요. :)

멀뚱이의 이미지

experiment_2.pl

open(FILE, "bom");
while() { $all_line .= $_; }
close(FILE);
$all_line =~ s/가나다/가세요/g;
open(FILE, ">bom1");
print FILE $all_line;
close(FILE);

bom 파일을 찾기 바꾸기한 결과를 바로 출력하는 대신, bom1 이라는 새 파일로 결과를 저장합니다.

강력한 치환기능이, 한글 깨짐 없이 잘 되네요. 2008년 5월 현재, 우분투 최신버전에서 실험중인데, 매우 잘 됩니다. :)

houyhn의 이미지

그냥 간단히 이렇게 해도 됩니다.

$ perl -pi -e 's/가나다/가세요/g' bom

멀뚱이의 이미지

bom 파일이 아니라, bom 파일은 원본 그대로 놔두고,

bom2 파일로 저장하게 하려면 어떻게 하면 좋을까요?

houyhn의 이미지

$ sed -e 's/가나다/가세요/g' bom > bom2

이게 perl로도 가능한지는 잘 모르겠네요.

--
http://dongsupark.de/

JuEUS-U의 이미지

shell에서니까 가능합니다.
스크립트에서 stdout으로 출력을 해주면 땡이잖아요 -ㅅ-

pcharley의 이미지

-i 옵션을 사용하면 원본 파일을 백업할 수는 있습니다.
find ./ -name bom.* -exex perl -pi.orig -e 's/바뀌고/바뀔/g' {} \;

sugarlessgirl의 이미지

perl 재밌네요~

멀뚱이의 이미지

http://ubuntulove.tistory.com/5

에릭 레이먼드는 해커가 되기 위해 파이썬 부터 배우고, 그다음 펄 그다음 C 그다음 리스프를 이야기하고 있더군요.

펄은 특히 위에서 볼 수 있는 것 처럼, 유닉스의 시스템 관리에서 매우 잘 쓰이며, 따라서, 해커는 시스템 관리자가 관리용으로 만든 펄 구문을 해독할 수 있을 정도는 되어야 한다고 합니다.

aero의 이미지

>에릭 레이먼드는 해커가 되기 위해 파이썬 부터 배우고, 그다음 펄 그다음 C 그다음 리스프를 이야기하고 있더군요.

에릭레이먼드는 개발자/기술자 부류이기 보다는 정치가/행정가 쪽 부류에 가까운 사람입니다. 에릭레이먼드의 낚시에 낚여서 파이썬쪽으로 간 사람도 많지만..별로~
그리고 해커가 여전히 선호하는 언어는 Perl입니다. 코드골프( http://codegolf.com )
가보면 Perl이 득세를 하지요.
언어의 문법이나 문화자체도 Perl이 해커들의 성향과 가장 근접하죠.

>펄은 유닉스 시스템 관리에서 매우 잘 쓰이며, 따라서 해커는 시스템 관리자가 관리용으로 만든 펄 구문을 해독할 수 있을 정도는 되어야 한다고 합니다.

펄은 유닉스 시스템관리에만 쓰이는게 아니라 MS도 이제 자신들 플랫폼위의 스크립트 언어로 VBscript,PowerShell,Perl 이 3개를 공식적으로 밀고 있습니다. 그리고 Perl은 일본,미국등 해외에서는 프래임웍 기반의 Web 2.0용 언어로 활발히 쓰이고 있고 바이오인포메틱스,언어학,공학,과학,금융등등 각 분야에서 유용하게 쓰이는 범용언어입니다. 그리고 보통 유닉스 관리자들이 쓰는 수준의 Perl은 단순한 구조입니다. 해커들이 시스템 관리용으로 만든 펄 구문을 해독할 수 있을 정도라는 건 앞뒤가 맞지 않는 말 같네요.

해커라면 DVD락을 깬 7 line 526 byte의 DeCSS perl코드정도를 이해하는 정도는 되어야겠죠..
http://www.cs.cmu.edu/~dst/DeCSS/Gallery/qrpff.pl

#!/usr/bin/perl
# 472-byte qrpff, Keith Winstein and Marc Horowitz <sipb-iap-dvd@mit.edu>
# MPEG 2 PS VOB file -> descrambled output on stdout.
# usage: perl -I <k1>:<k2>:<k3>:<k4>:<k5> qrpff
# where k1..k5 are the title key bytes in least to most-significant order
 
s''$/=\2048;while(<>){G=29;R=142;if((@a=unqT="C*",_)[20]&48){D=89;_=unqb24,qT,@
b=map{ord qB8,unqb8,qT,_^$a[--D]}@INC;s/...$/1$&/;Q=unqV,qb25,_;H=73;O=$b[4]<<9
|256|$b[3];Q=Q>>8^(P=(E=255)&(Q>>12^Q>>4^Q/8^Q))<<17,O=O>>8^(E&(F=(S=O>>14&7^O)
^S*8^S<<6))<<9,_=(map{U=_%16orE^=R^=110&(S=(unqT,"\xb\ntd\xbz\x14d")[_/16%8]);E
^=(72,@z=(64,72,G^=12*(U-2?0:S&17)),H^=_%64?12:0,@z)[_%8]}(16..271))[_]^((D>>=8
)+=P+(~F&E))for@a[128..$#a]}print+qT,@a}';s/[D-HO-U_]/\$$&/g;s/q/pack+/g;eval

ysy05의 이미지

예전에 포스팅 된 글 중에 pung96 님이 wiki를 만드셨다는 글이 있는데, 도움이 될것 같네요.
http://kldp.org/node/78014
http://wiki.kldp.org/wiki.php/PerlCommandLineCookBook