저는 컴퓨터 사용 시 정규표현식을 많이 사용하는 편입니다. 

처음 정규 표현식에 대해 공부할때 Perl을 사용하였습니다. 

그러다 보니 평소에 펄 스타일의 정규표현식을 주로 시도하는 편인데~ 오늘 알고보니 POSIX 에서는 일부 Perl 스타일의 정규표현식들이 정상적으로 동작하지 않더군요. 

Bash Shell 에서 정규표현식을 사용할 때 숫자를 매칭 할 때는 Perl 스타일로 \d 를 사용하면 안 된다는 것을 알게 되었습니다. 또한 word 를 매칭하는 경우도 \w 를 사용하면 안되더군요. 

위 내용을 비롯한 차이들은 아래 주소에서 확인 할 수 있습니다. 


https://en.wikipedia.org/wiki/Regular_expression#Character_classes


Bash Shell 에서 숫자를 매칭하는 경우에는 [0-9] 또는 [:digit:] 를 사용해야 하고~

워드를 매칭하고 싶은경우에는 \w 가 아닌 [A-Za-z0-9_] 를 사용해야 합니다. 

알파벳만 매칭하고 싶다면 [:alpha:] 나 [A-Za-z] 를 사용하면 됩니다.


Synology nas 를 사용하면서 기존 패키지 센터에 있는 프로그램들 이외의 프로그램들을 사용하고자 하는 경우가 종종 있습니다.

대부분의 패키지 관리자가 그렇듯 

Synology nas 패키지 관리자도 외부 패키지를 설치 할 수 있습니다. 

순서는 다음과 같고 아래 주소를 참조 했습니다.


  • 패키지 센터 > 설정을 눌러 줍니다. 
  • 일반>Synology Inc. 및 신뢰할 수 있는 게시자 를 선택 합니다. 이걸 안 하면 Synology 에서 제공하는 프로그램 이외의 프로그램들은 설치가 안 되더군요.
  • 패키지 소스> 추가 를 누르고~ 
  • 추가하고자 하는 package repository 를 추가 합니다. 저는 Synology nas DS216j 모델을 사용 중인데 IPKG 를 설치 하기 위해 아래 repository 를 추가 했습니다.
이름: cphub
       위치: https://www.cphub.net
  • 커뮤니티 > Easy Bootstrap Installer 를 설치 합니다.
  • iPKGui 를 설치하고 싶으면 위에 참조 링크의 주소와 같이 Perl 을 설치해야 하더군요. 

ipkg 는 아래 위치에 설치가 됩니다.

/volume1/@optware/bin/ipkg

ipkg 를 모든 path 에서 사용 가능 하도록 환경 변수 설정을 하기 위해 관리자 권한으로 /etc/profile 파일에 path 를 추가합니다.

PATH=$PATH:/volume1/@optware/bin

export PATH



Regular Expression 을 사용하는 경우 항상 테스트가 필요 합니다.

정규 표현식을 잘못 사용하면 돌이킬 수 없는 문제들이 발생 할 수도 있기 때문이죠.

그래서 오늘은 정규 표현식 테스트 사이트들에 대해 간단히소개 하려 합니다.

제가 구글링 해 본 바로는 Python 정규표현식 테스트 사이트로 아래 3개의 사이트가 나오더군요.




나머지 두 사이트는 파이썬 정규 표현식을 테스트만 할 수 있었습니다.

Cheat Sheet 가 있어서 정규표현식 문법이 생각 안날 때 참조하며 할 수 있다는 측면에서는 좋아 보였습니다. 

그런데 첫번째 링크인  https://regex101.com/ 의 경우 테스트 뿐만 아니라 코드 생성도 해 주더군요. 

모든 워드에 _postfix 라는 글자를 넣고 싶다고 해보죠~ 

다음과 같이 정규 표현식을 입력해서 테스트 해보면 모든 워드에 _postfix 를 넣을 수 있습니다.



다음으로 밑에 있는 code generator 버튼을 눌러 보면~ 방금 작성한 정규 표현식에 대해 Python 코드가 나옵니다. 


위 사이트에서 보시면 javascript, php, python, csharp, java, ruby, rust, golang, perl 에 대해 코드 생성을 해주네요~

정규 표현식 사용시 필수 사이트가 될 것 같습니다.



아래 포스팅에서 mathjax 에 대해 소개한 적이 있습니다.

 

http://iamaman.tistory.com/1662

 

$수식$$$수식$$ 의 형태로 사용하는데~

 

Powershell 이나 펄의 경우 변수 설정시에 $ 기호를 사용하므로 블로그에 코드 입력시 의도치 않은 동작을 하는 경우가 있습니다.

 

따라서 mathjax 를 사용하는 블로그에 $ 기호가 들어가는 경우 escaping 을 해 줘야 합니다.

 

$ 기호를 escaping 하는 방법은 다음과 같습니다.


<span class="tex2jax_ignore">$</span>

 

HTML 코드에 이런 $ 기호가 몇 개 안될때는 일일이 바꿔주면 되겠지만 $ 기호가 많은 경우에는 일일이 바꾸기 어렵습니다.

 

이런 경우 전체 HTML 코드를 복사 한 후에 아래 autohotkey 코드를 사용하면 한번에 $ 기호들을 escaping 할 수 있습니다.

 

Clipboard:= RegExReplace(Clipboard,"\$","<span class=""tex2jax_ignore"">$</span>")  


위 코드에서 보듯이 클립보드에 결과가 저장되므로 붙여넣기만 하면 됩니다.


MATLAB 을 사용하면서 이전에 Perl 을 실행 시킬 수 있다는 포스팅을 한 적이 있습니다.

 

http://iamaman.tistory.com/170

 

그런데 요즘은 Perl 보다도 많은 사람들이 Python 을 많이 사용하는 것 같은데 왜 MATLAB 에서 파이썬이 실행이 안될까 궁금하더군요.

   

MATLAB 최신 버전을 찾아보니 역시나 MATLAB 에서 Python 역시도 실행이 되더군요.

 

저는 현재 Anaconda를 설치해서 사용 중이며 python 3.4 버전을 설치해서 사용 중입니다.

 

Default setting 으로 Anaconda 를 설치하면 C:\Anaconda3\python.exe 에 설치가 됩니다.

 

MATLAB command window 에서 pyversion 이라는 명령을 사용하면 현재 MATLAB 에서 인식 되는 파이썬 버전과 실행 및 라이브러리 파일, 로드 여부가 표시 됩니다.



 

일단 자신의 윈도우 버전에 맞게 파이썬을 설치 해야 합니다. 즉 32비트 OS 면 32비트 파이썬을 설치해야 하고 64비트 OS 인 경우에는 64비트 파이썬을 설치해서 사용해야 정상적으로 인식 됩니다.

 

저처럼 Anaconda 와 같은 툴을 설치해서 사용하거나 아님 아래 주소에서 파이썬을 다운로드 받아서 설치하면 됩니다.

https://www.python.org/downloads/

 

요즘은 default 로 파이썬을 설치하면 path 환경 변수에 파이썬 폴더가 추가가 되는데~ path 에 추가가 되지 않아서 MATLAB 에서 인식이 안 되는 경우에는 다음과 같은 방법을 사용 할 수 있습니다.

 

pyversion < Python.exe Path >

ex) pyversion C:\Anaconda3\python.exe

 

다양한 파이썬 버전을 설치해서 사용하시는 경우 위 방법으로 사용하고자 하는 파이썬을 잡아 주면 됩니다.

 

다음으로 MATLAB 에서는 다음과 같이 python 명령을 사용해 보죠~

 

F = py.os.listdir('C:\Windows')

 


파이썬을 아시는 분은 아시겠지만 위 명령은 C:\Windows의 파일 리스트를 출력하는 명령 입니다.

 

위 예를 보면 아시겠지만 MATLAB 에서 파이썬 명령을 사용하기 위해서는 py 라는 키워드를 사용합니다.

 

저는 위 명령어가 다음과 같이 실행이 되네요.



ABAP, ActionScript, Ada, ADSO/IDSM, AMPLE, ant, Apex Trigger, Arduino Sketch, ASP, ASP.NET, Assembly, autohotkey, awk, blank, Bourne Again Shell, Bourne Shell, C, C shell, c#, C++, C/C++ Header, C:\Windows, CCS, choco, chocolatey, cloc, cloc-1.62.exe, cloc-1.62.pl, cloc.exe, Clojure, ClojureScript, cmake, COBOL, CODE, CoffeeScript, coldfusion, ColdFusion CFScript, COMMENT, css, CUDA, cython, d, Dal, dart, DOS Batch, dtd, ECPP, erlang, expect, F#, focus, fortran 77, Fortran 90, fortran 95, Go, Grails, Groovy, Haml, Handlebars, harbour, Haskell, HLSL, HTML, IDL, install, InstallShield, Java, javascript, JavaServer Faces, JCL, JSON, jsp, kermit, Korn Shell, Kotlin, less, LEX, LISP, Lisp/OpenCL, LiveLink OScript, LUA, M4, make, matlab, maven, Modula3, MSBuild script, mumps, Mustache, MXML, NAnt script, NASTRAN DMAP, Objective C, Objective C++, Ocaml, Oracle Forms, oracle reports, pascal, Pascal/Puppet, Path, Patran Command Language, perl, php, PHP/Pascal, Pig Latin, PL/I, PowerShell, python, QML, r, Racket, Razor, Rexx, RobotFramework, ruby, Ruby HTML, rust, SASS, Scala, sed, Skill, SKILL++, SMARTY, Softbridge Basic, sourceforge, SQL, SQL Data, SQL Stored Procedure, strip-comments, Swift, Tcl/Tk, Teamcenter met, Teamcenter mth, TypeScript, Unity-Prefab, Vala, Vala Header, Velocity Template Language, Verilog-SystemVerilog, VHDL, vim script, Visual Basic, Visualforce Component, Visualforce Page, Windows Message File, Windows Module Definition, Windows Resource File, WiX include, WiX source, WiX string localization, XAML, xBase, xBase Header, xml, xquery, xsd, XSLT, yacc, YAML, 라인수, 코드

이전 포스팅에서 powershell 을 사용한 코드 라인수 세기 방식에 대해 소개한 적이 있는데요~

 

http://iamaman.tistory.com/1577

 

검색을 해보니 역시나…… cloc 라는 프로그램이 있더군요.

 

cloc 의 홈 페이지는 아래와 같습니다.

 

http://cloc.sourceforge.net/

 

또는 이전에 소개했던 Chocolatey 을 사용하여 아래와 같이 설치 할 수 도 있더군요.

 

choco install cloc

 

다운로드 주소는 아래와 같습니다.

 

http://sourceforge.net/projects/cloc/files/cloc/


현재 최신 버전은 1.62 입니다.

 

 

현재 저는 윈도우 64비트를 사용 중이라 위 그림과 같은 페이지에서 cloc-1.62.exe 을 다운로드 받았습니다.


Perl 에 관심이 있는 분들은 cloc-1.62.pl 파일을 다운로드 받아서 소스를 살펴보는 것도 좋은 공부가 될 듯 하네요.

 

다운로드 받은 cloc-1.62.exe 파일을 cloc.exe 라는 이름의 심볼릭 링크로 해서 C:\Windows 와 같이 path 로 설정된 폴더에 넣거나 cloc.exe 로 파일명을 변경 한 후에 path 로 설정된 폴더에 넣습니다.

 

사용법은 굉장히 간단한데요~

 

CMD 창을 연 다음 아래 그림과 같이 cloc 파일명을 넣어 주고 엔터를 때리면~ 각 확장자 별로 code, blank, comment 줄 수 별로 카운트를 해서 목록으로 알려 줍니다.

 

 

위에 그림은 C++ 파일과 헤더 파일 MATLAB 파일의 Code, Blank, Comment 줄 수를 나타내 주는 것을 확인 할 수 있습니다. cloc 는 아래 주소에서 확인 할 수 있는 바와 같이 정말 다양한 언어에 대해 줄 수를 파악해 줍니다.

 

http://cloc.sourceforge.net/#Languages

 

ABAP, ActionScript, Ada, ADSO/IDSM, AMPLE, Ant, Apex Trigger, Arduino Sketch, ASP, ASP.Net, Assembly, AutoHotkey, awk, Bourne Again Shell, Bourne Shell, C, C Shell, C#, C++, C/C++ Header, CCS, Clojure, ClojureScript, CMake, COBOL, CoffeeScript, ColdFusion, ColdFusion CFScript, CSS, CUDA, Cython, D, DAL, Dart, DOS Batch, DTD, ECPP, Erlang, Expect, F#, Focus, Fortran 77, Fortran 90, Fortran 95, Go, Grails, Groovy, Haml, Handlebars, Harbour, Haskell, HLSL, HTML, IDL, InstallShield, Java, Javascript, JavaServer Faces, JCL, JSON, JSP, Kermit, Korn Shell, Kotlin, LESS, lex, Lisp, Lisp/OpenCL, LiveLink OScript, Lua, m4, make, MATLAB, Maven, Modula3, MSBuild script, MUMPS, Mustache, MXML, NAnt script, NASTRAN DMAP, Objective C, Objective C++, OCaml, Oracle Forms, Oracle Reports, Pascal, Pascal/Puppet, Patran Command Language, Perl, PHP, PHP/Pascal, Pig Latin, PL/I, PowerShell, Python, QML, R, Racket, Razor, Rexx, RobotFramework, Ruby, Ruby HTML, Rust, SASS, Scala, sed, SKILL, SKILL++, Smarty, Softbridge Basic, SQL, SQL Data, SQL Stored Procedure, Swift, Tcl/Tk, Teamcenter met, Teamcenter mth, TypeScript, Unity-Prefab, Vala, Vala Header, Velocity Template Language, Verilog-SystemVerilog, VHDL, vim script, Visual Basic, Visualforce Component, Visualforce Page, Windows Message File, Windows Module Definition, Windows Resource File, WiX include, WiX source, WiX string localization, XAML, xBase, xBase Header, XML, XQuery, XSD, XSLT, yacc, YAML

 

--strip-comments 같은 옵션을 사용하면 comment 을 지울 수도 있더군요. 외부에 코드를 보낼 때 종종 활용하게 될 것 같네요.


코딩을 하다 보면 규칙적인 코딩을 해야 하는 경우가 종종 있습니다.

 

아래 경우와 같이 순차적으로 증가하는 코드를 생각해 보죠~


a0=0;

a1=1;

a2=2;

a3=3;

a4=4;

.

.

.


아래 글에서도 소개를 했지만 vim 을 사용하는 경우 visincr 라는 플러그인을 사용하면 위 코드 예와 같은 경우 쉽게 인덱스를 증가 시킬 수 있습니다.

 

http://iamaman.tistory.com/324

 

그런데 저는 일반적으로 사용하는 에디터에서도 이런 자동 증가 기능이 있었으면 하는 생각이 들더군요.

 

그래서 Autohotkey 와 Perl 을 사용하여 인덱스를 자동 증가 시키는 코드를 한번 만들어 봤습니다.

 

일단 숫자를 인식 해야 할 테니 regular expression 을 지원해야겠고 문자를 숫자로 인식 한 후에 1씩 증가 할 수 있어야겠죠~ 그래서 이 부분은 Perl 을 활용 했습니다.

 

이를 위한 Perl 코드는 다음과 같습니다. 아래 코드에서 보는 바와 같이 Win32::Clipboard 을 활용 했습니다. 아래 Perl 코드의 파일 명은 ClipIncrease.pl 로 만들었습니다.

 

 

Win32::Clipboard 이 없는 분들은 CPAN client 을 실행 한 후에 install Win32::Clipboard 이라는 명령을 통해 설치 할 수 있습니다.

 

다음으로 위 코드를 실행 시키기 위해 Autohotkey 단축키를 하나 만들었습니다. 코드는 다음과 같습니다. 아래 코드에서는 ClipIncrease.pl의 Fullpath 경로만 제대로 설정해 주면 됩니다.

 

+#=::

InputBox, Nloop, Enter # of Loop, , , 300, 100

if Errorlevel=0

{

Run, %comspec% /c perl.exe ClipIncrease.pl의 Fullpath %Nloop%, , Min

}

 

SplashTextOn, ,, Processing End,

Sleep, 1000

SplashTextOff

return

 

위 Autohotkey 코드의 단축키는 Shift + Win + = 입니다.

 

사용 방법을 간단히 설명 드리면~ 위 예에서~ 첫 줄의 코드 부분(a0=0;)을 복사 합니다.

 

다음으로 Shift + Win + = 을 눌러서 Autohotkey 코드는 실행하면 나타나는 InputBox 에 다음과 같이 증가 횟수를 적어 줍니다. 저는 10회를 적었습니다.

 

Ok 을 누른 후에 좀 있으면 다음과 같이 "Processing End" 라는 메시지가 나옵니다.

다음으로 위 코드의 아래 쪽에 CTRL + V 을 해서 붙여 넣기를 합니다.

 

그럼 다음과 같은 코드가 만들어 집니다.

 

위 예는 간단히 10 회 반복을 했지만~ 100 회 1000 회 반복도 쉽게 할 수 있겠죠?


아래 포스팅에서 Perl 과 Autohotkey 를 사용한 Ms Word 자동화에 대해 소개한 적이 있는데요.

 

http://iamaman.tistory.com/335


http://iamaman.tistory.com/458


오늘은 요즘 제가 종종 사용하는 python 을 사용한 ms word 자동화에 대해 간단히 소개하려 합니다.

 

뭐 다른 사람에게 소개한다는 측면보다는 제가 기억하기 위한 용도로 적어 놓는거니 그리 자세하지는 않습니다.

 

일단 python 에서 ms word 문서를 만들기 위해서는 아래 주소에서 pywin32 모듈을 설치해야 합니다.

 

http://sourceforge.net/projects/pywin32/files/pywin32/

 

다음으로 아래 주소의 예제들을 참조하여~

 

http://www.blog.pythonlibrary.org/2010/07/16/python-and-microsoft-office-using-pywin32/

 

http://win32com.goermezer.de/content/view/173/192/

 

 

간단하게 python으로 코딩을 해보죠~

 

다음은 간단히 파일 저장하는 코드 입니다

 

import win32com.client

 

wordapp = win32com.client.Dispatch("Word.Application") # Create new Word Object

wordapp.Visible = 0 # Word Application should`t be visible

worddoc = wordapp.Documents.Add() # Create new Document Object

worddoc.PageSetup.Orientation = 1 # Make some Setup to the Document:

worddoc.PageSetup.LeftMargin = 20

worddoc.PageSetup.TopMargin = 20

worddoc.PageSetup.BottomMargin = 20

worddoc.PageSetup.RightMargin = 20

worddoc.Content.Font.Size = 11

worddoc.Content.Paragraphs.TabStops.Add (100)

worddoc.Content.Text = "Hello, I am a text!"

worddoc.Content.MoveEnd

worddoc.SaveAs("C:/test.docx")

worddoc.Close() # Close the Word Document (a save-Dialog pops up)

wordapp.Quit() # Close the Word Application

 

위 코드를 실행해 보면 C:\test.docx 에 다음과 같은 문서가 생성됨을 확인 할 수 있습니다.

 

 

아래는 MSDN 에 나와 있는 저장형식들 입니다.

 

http://msdn.microsoft.com/en-us/library/bb238158%28v=office.12%29.aspx

 

Openoffice automation 에 대한 글도 있어서 링크 합니다.

 

http://stackoverflow.com/questions/1035183/how-can-i-create-a-word-document-using-python

 

Ms Word 를 포함하여 다양한 예제가 나와 있는 주소

 

http://win32com.goermezer.de/content/category/7/86/192/

 

이전 포스팅에서 C++, MATLAB 을 사용하여 Cartesian Product 를 구하는 방법에 대해 알아본 적이 있습니다.



2013/08/18 - [programming language/MATLAB] - MATLAB 모든 경우의 수 뽑기 Cartesian Product


2014/03/01 - [programming language/C/C++] - C++ Cartesian Product


2013/08/18 - [programming language/powershell] - Powershell 경우의 수 조합 다 구하기(Cartesian Product)


 

이번에는 python 에서 Cartesian Product 를 구하는 방법에 대해 확인해 보니 이전의 방법들 보다 훨씬 더 쉽더군요.

 

아래 주소에 그 방법이 나와 있었습니다.

 

http://stackoverflow.com/questions/9101101/python-cartesian-product

 

itertools.product() 함수를 사용하는 방식이며 Document 는 아래 주소에서 확인 할 수 있습니다.

 

https://docs.python.org/2/library/itertools.html#itertools.product

 


다음과 같은 결과가 나옵니다.

 

bad

baf

bed

bef

cad

caf

ced

cef


많은 스크립트 언어가 있지만 정규표현식이나 문자열 처리 등에는 정말 Perl 만한 언어가 없는 것 같습니다.

 

조금만 사용할 줄 알아도 생활이 편해 지더군요.

 

저는 Perl을 그리 잘은 못하고 간단한 정규표현식이나 몇 몇 모듈 등만 아는 정도인데~

 

Perl을 사용하면서 제 생활이 정말 많이 편해졌다는 생각을 많이 합니다.

 

컴퓨터를 사용하려면 당연히 프로그램을 실행 시킬 텐데 이런 프로그램 실행을 정말 빠르고 쉽게 할 수 있는 툴로 Launchy 에 대해 아래 포스팅에서 소개한 적이 있습니다. 


2013/09/01 - [유틸] - 편리한 런치 프로그램 Launchy


2014/04/20 - [유틸] - 생산성 향상 어플 Launchy plugin 추가 방법

 

Launchy 의 다양한 기능 중에 저는 Weby 를 많이 사용하곤 하는데 Weby를 사용하다 보니~ 브라우저에서 더 이상 북 마크 기능은 안 쓰게 되더군요.

 

사실 북 마크를 해 놓더라도 그거 찾다가 시간 다 가곤 하는데 weby 를 사용하면서는 이런 불편 함 이 사라졌습니다.

 

그런데 Launchy 의 Weby를 사용하다가도 불편한 점이 생기더군요.

 

저는 Launchy를 이곳 저곳에서 사용하는데~ launchy 의 설정 등을 백업해서 정리를 합니다.

 

가령 집에서 사용하는 launchy의 설정은 launchy.home.ini 이라고 하고~ 회사에서 사용하는 Launchy 의 설정 파일은 launchy.com.ini 로 저장곤 합니다.

 

이곳 저곳에서 분산된 설정들을 한곳에 모으기 위해서는 merge 를 해야 하는데~ 한 두 개 일 때는 쉽지만 항목들이 여러 개가 되면서는 merge 하기가 힘들더군요.

 

그래서 간단하게 launchy.ini 파일들을 merge 하는 Perl 스크립트를 작성해 봤습니다. 아래 붉은 색으로 표시한 부분이 merge 할 파일 들이고 Perl 코드는 ini 파일들과 같은 폴더에서 실행 시켰습니다.

 

본인의 머지 할 파일 명들을 아래 @FILEPATH 부분에 기록해 주면 됩니다.

  

위 코드를 실행 시키면~ Merge.txt, Merge_weby.txt 파일이 생성됩니다. Merge_weby.txt 파일이 weby 정보들에 대한 merge 파일 입니다.

 

복사 해서 launchy.ini 파일의 [weby] 부분에 붙여 넣기 하시면 됩니다.


  1. 김병문 2016.09.19 15:40

    지금은 dll 형식으로 바뀐 것 같습니다. 백업하려면 dll파일만 보관했다가 붙여넣기 하면 되나요?

    • 남성 2016.09.19 15:43 신고

      dll은 라이브러리인데... 그게 설정파일이 아닐겁니다

리눅스에서 문자열 등을 찾을 때 grep 를 많이 사용하곤 하는데요~

 

grep 는 아래 소개 드렷던 gow 를 설치하면 윈도우에서도 사용 가능 합니다.

 

그런데 최근에 검색을 좀 해보니 grep 보다 좀더 편리한 툴이 있더군요.

 

바로 ack 라는 툴인데요.

 

저는 일단 좀 써보니 그 속도가 정말 빠르더군요. perl 로 만들어 졌다고 하던데…. 이렇게 빠른가 싶었습니다.

 

ack 의 공식 홈페이지는 다음과 같습니다.

 

http://beyondgrep.com/

 

install 방법은 아래 주소에 나와 있는데~

 

http://beyondgrep.com/install/

 

perl 의 cpan module 로도 있더군요. 모듈 이름은 App::Ack 입니다.

 

우분투 등에서는 그냥 apt-get install ack-grep 하면 설치되고~

 

저는 현재 윈도우 환경이라 아래 포스팅에서 소개드렸던 chocolatey 를 이용하여 설치했습니다. chocolatey 를 사용하면 windows 에서 다음 명령어로 ack 를 설치 할 수 있습니다.


2014/05/25 - [컴퓨터일반] - 윈도우 프로그램을 쉽게 설치해 보자~ chocolatey

 

cinst ack

 

ack 를 위에서도 애기했지만 perl 을 사용하기 때문에 윈도우 버전에 맞는 perl 이 설치되어 있어야 합니다.

 

ack 사용 방법은 아래 주소에 설명되어 있는데~ grep 를 사용해 보신 분이라면 쉽게 알 수 있을 것 같네요.

 

http://beyondgrep.com/documentation/

 

html 파일에서 field 라는 글자가 들어있는 부분을 찾기 위해서는 아래와 같이 명령어를 작성하면 됩니다.

 

ack –-html field

 

 

ack 는 기본적으로 Recurse 하게 동작하더군요. 즉 하위 폴더들을 기본적으로 다 들어가서 찾는 다는 뜻입니다.

 

Recurse 옵션이 기본적으로 켜져 있으므로 Recurse 옵션을 끄기 위해서는 –n 또는 --no-recurs 옵션을 줘야 합니다.

 

ack 의 좋은 점은 단연 속도에 있을 것 같은데요…. 정말 빨리 찾더군요.

 

아래 동영상을 보시면 8000개 정도의 파일에서 단어 검색하는데 약 2초 걸리더군요. 찾은 단어의 경우의 수에 따라 다르겠지만 빠르긴 하더군요. 쓸만 하겠죠~ 아래 동영상을 보니 vim 플러그인도 있어서 vim에서도 ack 를 사용할수 있는것 같더군요.



보통 Autohotkey 를 사용하여 clipboard 의 내용을 바꾸거나 하는 과정들을 많이 하곤 하는데요~

 

오늘은 Perl 에서 clipboard 의 내용을 변경하거나 하는 방법에 대해 알아봤습니다.

 

Perl 의 CPAN 을 찾다 보니 역시나 있더군요.

 

윈도우의 경우 Win32::Clipboard 모듈을 설치해 줘야 합니다.

 

저는 Strawberry Perl 을 설치해서 CPAN Client 를 사용하는데요~

 

다음과 같이 CPAN Client를 실행한 후에~


 

아래 그림과 같이 Win32::Clipboard을 install 합니다.


install Win32::Clipboard

 

 

이제~ Perl 에서 Win32::Clipboard 모듈을 사용하면 되는데요~

 

사용법은 굉장히 심플하더군요.

 

아래는 예제 코드 입니다.

 

use strict;

use warnings;

use Win32::Clipboard;

 

my $CLIP = Win32::Clipboard();

 

my $String=$CLIP->Get(); # Clipboard 내용 가져오기

 

print $String;

 

$CLIP->Set("Changed Clipboard"); # Clipboard 에 저장하기

$CLIP->WaitForChange();          # Clipboard 내용 바뀔 때까지 기다리기

 

위 코드를 실행 시키면~ clipboard 에 Changed Clipboard 라는 내용이 저장되게 됩니다.

 

CTRL + V 를 눌러서 붙여 넣어보면 Changed Clipboard 라는 내용이 붙여 넣어집니다.

 

아래는 Windows CMD 창에서 실행 시킨 내용입니다.




아래 주소에서 Notepad++를 이용한 Perl 실행 방법에 대해 설명 드렸습니다.

 


2014/02/02 - [컴퓨터일반] - Notepad++ 에서 Perl 실행 방법


위 글의 마지막에 NppExec 라는 플러그 인에 대해 소개했었는데~

 

NppExec 에서도 비슷하게 F6을 눌러서 Execute 화면을 실행 할 수 있습니다.


 

위 주소에서 설명한대로 Perl 을 실행하려면 Command 화면에 Perl "$(FULL_CURRENT_PATH)" 라고 명령어를 입력하고 Save 를 눌러서 Perl Execute 등과 같은 적당한 이름으로 저장한 후에 OK 를 누르면 실행이 됩니다.

 

NppExec를 통해 실행 시키면 Notepad++ 자체 console 화면에 실행 결과가 나오게 되고 그 결과는 다음과 같습니다.

 

아래 화면은 아래 명령어를 실행 시킨 것입니다. 이는 cmd 창에서 실행한 결과와 동일합니다.


Perl -v

dir


 

바로 이전에 실행했던 명령을 다시 실행하기 위해서는 Ctrl+F6 를 누르면 되더군요.

 

 

Notepad++ 의 Environment Variables 들의 목록은 아래 주소에 나와 있습니다.

 

http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=External_Programs

 

크게 두 가지 형태의 환경 변수들이 있는데 File level environment variables, Document level environment variables 이라고 명명하더군요.

 

File level environment variables 은 다음과 같습니다. 각 환경 변수의 이름과 그 예 입니다.


FULL_CURRENT_PATH : E:\my Web\main\welcome.html

CURRENT_DIRECTORY : E:\my Web\main\

FILE_NAME : welcome.html

NAME_PART : welcome

EXT_PART : html

SYS.<var> : system environment variable, e.g. $(SYS.PATH)

 

Document level environment variables 은 다음과 같습니다.

CURRENT_WORD: 현재 선택한 단어

CURRENT_LINE: 현재 커서의 라인 줄 수

CURRENT_COLUMN: 현재 커서의 행 수

NPP_DIRECTORY: Notepad++ 디렉터리

 

NppExec 이 설치되어 있다면 다음과 같은 추가적인 변수들도 사용 할 수 있습니다.

PLUGINS_CONFIG_DIR : full path of the plugins configuration directory

#N : full path of the Nth opened document (N=1,2,3...)

#0 : full path to notepad++.exe

LEFT_VIEW_FILE : current file path-name in primary (left) view

RIGHT_VIEW_FILE : current file path-name in secondary (right) view




아래 포스팅에서 소개했던 Notepad++ 는 가벼우면서도 굉장히 편리해서 많이들 사용하시리라 생각하는데요~

 

요즘 부쩍 Notepad++를 많이 사용하면서 그 기능들을 알아보고 있습니다.

 

Notepad++는 에디터이면서도 설정만 잘 하면 IDE 처럼도 사용이 가능하더군요.

 

셋팅하는 맛이 있는 에디터라는 생각이 듭니다.

 

오늘은 간단하게 Notepad++에서 Perl 을 실행하는 방법에 대해 설명 드리려 합니다.

 

저는 현재 Strawberry Perl 을 설치하였고~ 환경변수에 Perl 폴더가 설정되어 있는 상태입니다.

 

Perl 이 정상적으로 환경변수에 설정 됐다면 Perl –v 라는 명령을 쳤을 때 아래 그림과 같이 나올 겁니다.

 

Notepad++에서는 F5를 누르거나 아래 그림과 같이 실행 → 실행을 누르면 됩니다.

 

다음으로 아래 그림과 같이 Perl 을 실행하는 명령어를 적어 줍니다. $(FULL_CURRENT_PATH) 는 현재 파일의 전체 경로에 대한 Notepad++ 내부 명령어 입니다.

 

Perl "$(FULL_CURRENT_PATH)"

 

 

이제 해당 실행의 실행명과 단축키를 다음과 같이 설정합니다. 저는 Ctrl+F5로 설정했는데~ 편하신대로 하면 됩니다.

 

참고로 아래 포스팅에서는 NppExec라는 플러그인을 사용하여 Perl 을 실행하는 방법에 대해 설명하더군요.

 

http://damienlearnsperl.blogspot.kr/2009/01/launch-your-perl-script-from-notepad.html

 

윈도우에 있는 메모장은 가볍기는 하지만 그 기능이 좋지는 않아서 그냥 텍스트 파일 내용 확인 용도로 주로 사용합니다.

 

저는 윈도우에서 VIM 도 사용하긴 하지만 Notepad++ 도 병행해서 사용하는 편인데요~

 

Notepad++는 가볍기도 하고 여러 plugin 들을 추가 할 수 있어서 대단히 편리하더군요.

 

다음과 같이 2 패널로도 사용할 수 있고요~

 

저는 Powershell 코딩을 할 때는 Windows Powershell ISE 의 에디터도 있지만 몇 가지 불편한 점들이 있어서 Notepad++ 를 주로 사용합니다.

 

그런데 자동 인덴트가 안되면 참~~ 불편하더군요.

 

일단 Notepad++의 자동인덴트 기능은 settings → preferences 에서 들어가서 MISC. 탭에서 아래 그림과 같이 Auto-indent 에 체크를 하면 됩니다.

 

 

이렇게 설정을 해도 이미 인덴트가 엉망이 된 코드 같은 경우에 자동으로 해주진 않더군요.

 

그래서 쓸만한 plugin 을 알아보니 TextFX 라는 plugin이 있더군요.

 

아래 그림과 같이 plugin manager 에서 TextFX Characters 에 체크를 해주고~ install 을 눌러서 설치를 해 줍니다.

 

 

아래 그림과 같이 indent 가 제대로 안된 Powershell 코드를 손 쉽게 자동 인덴트를 할 때는

 

 

Notepad++ 에서 TextFX → TextFX Edit → Reindent C++ code 를 클릭해 줍니다.

 

그럼 이렇게 예쁘게 자동인덴트가 된 Powershell 코드를 확인 할 수 있습니다.

 

Powershell 코드 뿐만이 아니라 Perl 을 비롯한 다른 확장자 코드들도 웬만하면 예쁘게 Auto-indent 가 되더군요.

특정 파일에 다음과 같은 단어 리스트가 있는 경우 중복을 제거하고~ ABC 순서로 sorting 을 해야 하는 경우가 있습니다.

 

abacuses

abaft

abalone

abalones

abacuses

abandon

abandoned

abalones

 

한 10줄 안팎이면 노가다로 하겠지만 몇 천 몇 만 줄이 되면 노가다로 하기에는 무리가 있죠~

 

이런 경우 Perl이나 Python과 같은 스크립트 언어가 제격일 텐데요~

 

오늘은 그냥 무슨 바람이 불어서 그런지 그냥 python을 사용하고 싶더군요.

 

아래 포스팅에서 소개를 했지만 제가 요즘 Spyder 같은 툴에 매력을 느껴서 그런 것도 같습니다.


2013/11/13 - [유틸] - 과학 분석에 사용되는 Python IDE Spyder

 

어쨌든 ipython을 사용하는 방법을 검색 해보니 아래 주소에 간단하게 나오더군요.


http://stackoverflow.com/questions/2931672/what-is-the-cleanest-way-to-do-a-sort-plus-uniq-on-a-python-list

 

다음과 같이 간단하게 Unique Sorting 을 할 수 있었습니다. Set Type으로 만드니깐 간단하게 중복된 내용들이 제거되더군요.

 

fo=open("input.txt","r")

line=fo.readlines()

my_list= sorted(set(line))

fo.close()

 

fo=open("result.txt","w")

fo.writelines(my_list)

fo.close()

 

이런 게 스크립트의 매력인가 봅니다.


Eclipse 를 사용한 개발은 참 재미있는 것 같다.

 

기본 프로그램에 각종 플러그인들만 추가하면… 대부분의 코딩이 가능하고 그냥 일반적인 에디터에서 코딩하는것에 비해 그 효율성이 확실히 배가 된다.

 

뭐 사람들이 많이 사용하는데는 다~~ 그 나름의 이유가 있는 법!!

 

아래 글에서 밝힌 바와 같이 현재 나의 Eclipse 버전은 Kepler (4.3) 이다. 

2013/09/29 - [컴퓨터일반] - Eclipse Kepler upgrade 방법


플러그인 설치 방법들은 무지하게 간단한데~ Help → Install New Software 에 들어가서 각 플러그인들의 주소를 설정해 주고 install 해 주면 된다.

 

  • C/C++ 코딩을 위한 CDT 플러그인

 

각 버전별 CDT 플러그인 들은 아래 주소에서 확인 가능하다.

http://www.eclipse.org/cdt/downloads.php

CDT - http://download.eclipse.org/tools/cdt/releases/kepler/

 

  • Perl 코딩을 위한 Eclipse 플러그인 EPIC

http://www.epic-ide.org/download.php

EPIC - http://e-p-i-c.sf.net/updates

 

  • Python 코딩을 위한 Eclipse 플러그인 pydev

http://pydev.org/manual_101_install.html

PYDEV - http://pydev.org/updates

 

  • php 코딩을 위한 Eclipse 플러그인 PDT

http://www.eclipse.org/pdt/downloads/

PDT - http://download.eclipse.org/tools/pdt/updates/release

 

  • 안드로이드 코딩을 위한 Eclipse 플러그인

http://developer.android.com/sdk/installing/installing-adt.html

ADT - https://dl-ssl.google.com/android/eclipse/

 

  • APTANA 설치를 위한 Eclipse 플러그인

APTANA - http://download.aptana.com/studio3/plugin/install


저는 자주는 아니지만 정규표현식을 사용해서 텍스트 파일 등을 분석해야 하는 경우에 Perl 을 종종 사용하곤 하는데요~

 

Perl 문법이 간단한 편이긴 하지만~ 자주 사용되거나 중복되는 기능을 하는 부분들은 함수로 만들어서 사용하는 게 좋겠죠~

 

일의 특성상 자주 사용하는 기능들이 있어서 이러한 부분들은 라이브러리의 형태로 만들어서 사용하는 게 편리합니다.

 

오늘은 Perl 에서 다른 파일에 있는 함수를 가져다 사용하는 방법에 대해 간단히 설명 드리려 합니다.

 

C/C++ 에서는 다른 파일을 참조 할 때 include 를 하고~ 자바 등에서는 import 를 하는 것과 유사하게~

 

Perl 에서는 require 를 사용합니다.

 

그리고 함수는 다른 파일에 작성 후 파일의 맨~~ 마지막에 1; 라고 작성해 줘야 합니다.

 

간단하게 더하기를 하는 예제를 만들어 보죠~

 

일단 함수를 정의하는 부분의 코드는 다음과 같습니다.

 

 

<functionS.pl>

use strict;

use warnings;

 

sub add_func {

    my ($number1, $number2) = @_;

    return ($number1 + $number2); # 더하기~

}

1;

 

그리고 위 함수를 사용하는 파일의 코드는 다음과 같습니다.

 

<ExecutionFile.pl>

use strict;

use warnings;

 

require 'functionS.pl';

 

my $result = add_func(10,20);

print "$result\n" ;

 

이렇게~ 코딩하고~ ExecutionFile.pl 파일을 실행 시키면~~ 10+20 의 결과인 30이 나오게 됩니다.



  1. sng2c 2013.05.14 13:49

    안녕하세요. perl에 관심이 있으신거 같지만, 상당히 옛날 자료를 보시는 것 같아서 이렇게 댓글 남깁니다.
    http://qntm.org/files/perl/perl_kr.html 이걸 보시길 바래요~

지난 포스팅에서 perl 을 이용한 워드 문서 생성 자동화에 대해 간략히 소개 드렸었는데요.



2012/01/11 - [컴퓨터일반] - Perl을 이용한 MS word 문서 생성 자동화


 

아래 주소의 글을 보니 Autohotkey_L 을 이용한 MS word 에 대한 예제 코드가 있더군요.

 

http://www.autohotkey.com/community/viewtopic.php?t=61509&start=30&p=393082#p393082

 

위 링크의 예제에서 끝에 파일로 저장하도록 수정해 봤습니다.

 

코드는 다음과 같구요~

 

oWord := ComObjCreate("Word.Application") ; create MS Word object

oWord.Documents.Add ; create new document

 

oWord.Selection.Font.Bold := 1 ; bold

oWord.Selection.TypeText("Visit ") ; type text

oWord.ActiveDocument.Hyperlinks.Add(oWord.Selection.Range, "http://www.autohotkey.com/forum/topic61509.html"

,"","","COM Object Reference [AutoHotkey_L]") ; insert hyperlink

oWord.Selection.TypeText("and learn how to work with ") ; type text

oWord.Selection.Font.Italic := 1 ; italic

oWord.Selection.TypeText("COM objects") ; type text

oWord.Selection.Font.Bold := 0, oWord.Selection.Font.Italic := 0 ; bold and italic off

oWord.Selection.TypeText(".") ; type text

oWord.Selection.TypeParagraph ; type paragraph (enter, new line)

 

;~ oWord.Visible := 1, oWord.Activate ; make it visible and activate it.

 

oWord.ActiveDocument.saveas("c:\autohotkeyMSWORD.docx")

oWord.Quit()

 

보시면 아시겠지만 autohotkeyMSWORD.docx 라는 워드 파일이 만들어집니다.

 

매번 반복해서 작성하게 되는 문서는 이런 자동화 툴들을 이용하면 편리하겠죠~

 

작성된 결과는 이렇게 보이더군요~




 


글을 시작하기 전에, 본 포스팅에 포함된 코드는 아래 주소의 내용을 참조하였음을 밝힙니다.

 

http://advent.perl.kr/2011/2011-12-09.html

 

유투브에서 동영상을 보다 보면 끊기는 경우가 종종 있어서 다운로드 받아서 안 끊기게 보고 싶다는 생각을 하는데요.

 

위 주소에서 Perl 을 이용하여 유투브에 있는 동영상을 다운로드 하는 방법에 대한 설명이 자세히 나와 있습니다.

 

역시 Perl 은 참 재주 많은 놈이더군요.

 

그런데 위 주소의 코드를 그대로 실행 시키면 다음과 같이 잘 구분이 안 되는 파일명으로 동영상이 다운로드 됩니다.

 

EX) EaEkTHNNL_o.mp4

 

그래서 파일명을 그나마 알아보기 쉽게 저장하도록 코드를 추가 하였습니다.

 

본 코드를 실행하기 위해서는 위 주소에 기재된 바와 같이 CPAN 에서 다음 두 모듈을 install 해야 합니다.

 

WebService::GData::YouTube

WWW::YouTube::Download

 

수정된 코드는 다음과 같구요~ 저는 youtube.pl 이라는 이름으로 저장했습니다.

 

현재 윈도우 7 이므로 Encode 모듈을 추가 했습니다.

 

use 5.010;

use strict;

use warnings;

use WWW::YouTube::Download;

use WebService::GData::YouTube;

use Encode;

 

# 아듀먼트로 검색 값

my ($search, $limit) = (@ARGV);

$limit //= 10;

 

$search = decode('cp949', $search);

 

# 검색 값으로 유투브 검색

my $search_youtube = WebService::GData::YouTube->new;

 

# 쿼리 값 설정

$search_youtube->query()->q($search)->limit($limit, 0);

 

# 검색

my $results = $search_youtube->search_video();

 

# 다운로드

my $client = WWW::YouTube::Download->new;

foreach my $ret (@$results) {

    my $title = $client->get_title($ret->video_id);

    my $suffix = $client->get_suffix($ret->video_id);

 

    $title= encode( 'cp949', decode('UTF-8', $title) );

    my $newFilename = $title . '.' . $suffix;

 

    say "Starting Download : " . $newFilename;

 

    $client->download($ret->video_id, {

            filename => $newFilename,

        });

}

 

다음과 같이 실행 해 보니깐~

 



 

위 실행화면은 아이유에 대해 2개만 검색하는 경우 입니다.

 

요렇게 두 개의 동영상 파일이 다운로드 되더군요.

 

아이유(IU) - 너랑 나 (YOU & I) MV Full Ver. (SD).flv

 

IU (아이유) - 하루 끝 (Every End of The Day) [MV HD ENG SUB].mp4

 

결론은…..

 

참조한 글의 저자인 eeyees 님과

 

Perl 의 창시자인 Larry Wall 과

 

필요한 모듈을 만들고 공유해 주신 세계의 똑똑한 분들과

 

유투브 서비스를 해주는 구글 관계자 분들과

 

아이유 동영상을 유투브에 올려 주신 분들과

 

마지막으로 아이유 가수님께… 감사하다는 겁니다.


YouTube에는 정말 다양한 볼거리들이 있어서 종종 들어가서 여러 동영상을 감상 합니다.

 

그런데 YouTube에는 재미나 오락성의 동영상뿐만이 아니라 정말 다양한 분야의 동영상들이 있더군요.

 

TED에서 세계적인 명사들의 강의를 보면서 지적 자극을 받는 것처럼 YouTube 를 통해서도 충분히 지적 자극을 받을 만한 내용들이 많이 눈에 띕니다.

 

아래는 최근에 본 동영상인데 ~

 

bigthink.com 에서 Perl 의 창시자인 Larry Wall 을 인터뷰한 내용입니다.



Larry Wall


 

Perl 을 사용하다 편리함을 느끼고 ~

 

이 언어를 창시한 사람은 어떻게 생겼을까? 또는 그는 어떤 목소리를 가지고 있고 어떤 생각을 하는 사람일까? 하는 언어 외적인 궁금함도 생기는데~

 

동영상을 보니 괜히~~ Perl 을 더 열심히 공부하고 싶다는 생각이 들더군요.


그렇다고 제가 남자 좋아한다는 건 아니구요 .. ㅋㅋㅋㅋ 




  

엔지니어라는 직업을 갖고 살아가면서 정작 중요한 건 끊임없는 지적 자극이라고 생각하는데~ 이런 동영상이 도움이 된다고 생각합니다.

 

영어가 딸려서 1% 밖에 이해를 못한다고 하더라도 ~ 적어도 영어 공부 열심히 해야겠다는 반성은 할 수 있어서 저는 제가 관심 있는 내용에 대해 YouTube를 찾아 봅니다.

 

이런 동영상을 보면서 내용을 100% 이해 못한다고 나는 안 봐~~ 라고 할 필요는 없을 것 같습니다.

 

저는 위 동영상 0.01 % 이해 했습니다. ㅋㅋㅋㅋ

 

동영상을 보고 나니깐 영어공부 해야 겠다는 생각이 절실 하네요.… 이런 자극 한~~ 만 번 받다 보면 영어도 잘 할 수 있겠죠 뭐 ㅋㅋㅋㅋㅋ

 

위 동영상 완벽하게 이해 하신 분 있으면 저 좀 갈 켜 주세요~

 

영어점수를 위한 영어 공부가 아니라 내가 관심있는 분야에 대해 좀더 깊은 지식을 쌓기 위한 실용적인 목적으로서의 영어 공부를 해야겠다는 생각이 드네요~


Vim 은 설정하기에 따라서 정말 무궁 무진한 편리함이 있는 에디터라는 생각이 듭니다.

 

이러한 Vim 설정 파일은 아시다시피 C:\Program Files\Vim\_vimrc 에 있는데요.

 

64 비트를 쓰시는 분들은 C:\Program Files(x86)\Vim\_vimrc 에 있을 겁니다.

 

어쨌든 이 설정 파일에 자신 만의 단축키를 적용해서 사용하다 보면 자신도 모르게 Vim 이라는 에디터에 대해 공부를 하게 되더군요.

 

예전에 Vim 에서 사용가능한 Perl plugin 에 대해 소개한 적이 있는데 편리하게 사용하고 계신지 모르겠네요.

  

2011/05/04 - [유틸] - 윈도우 환경에서 vim Perl IDE 사용하기

그런데 위 포스팅에서 부족했던 게 Vim 에서 perl 을 어떻게 실행하는지에 대한 내용이 빠졌었네요.

 

그래서 오늘은 간단하게 Vim 에서 perl 실행하는 방법에 대해 소개 드립니다.

 

Perl 은 당연히 설치가 되었다는 가정하에 설명 드리겠습니다.

 

위에서 말씀드린 _vimrc 파일을 엽니다.

 

그리고 아래와 같이 써주고 저장 후 닫습니다.

 

map <F7> :! perl % <CR>

 

이제 부터는 F7 키를 누르면~~ Vim 에서 perl 코드를 실행 할 수 있습니다.

 

위 설정 예에서는 F7 으로 했는데 ~~ 단축키야 자신이 원하는 데로 지정하면 되고요.

 

간단하게 아래와 같은 코드에서 ~~

 

 

F7 을 살포시 누르면~~ 다음과 같이 위 코드 내용이 perl 로 실행되게 됩니다.

 

 

음악 파일 이름 등을 일괄 변경 하는 경우 이전에 말씀 드린 NexusFile 등과 같은 프로그램의 파일이름 바꾸기 도구 등을 이용하면 대부분 편리하게 변경이 가능합니다.

 

2011/03/26 - [컴퓨터일반] - NexusFile 을 이용한 파일 이름 일괄 변경

 

하지만 이런 툴 들도 개발자가 만들어준 틀 안에서만 바꿀수 있기 때문에 내 마음대로 모든걸 바꾸기에는 한계가 있습니다. 이럴때를 위해 약간의 프로그램 지식을 쌓는 것이 좋다고 생각됩니다.

 

윈도우 운영체제에서라면 Autohotkey 를 공부하시기를 권해 드립니다. 굉장히 쉬우면서도 컴퓨터 사용을 효율적으로 할 수 있게 도와 주는 언어거덩여~~ 물론 영어의 압박도 있고… 나름 노력도 필요하긴 하지만 들어간 노력에 비해 정말 다양한 것들을 할 수 있는 툴이라는 데는 의심의 여지가 없습니다. 


2012/02/22 - [컴퓨터일반] - Autohotkey를 사용해 보아요~


어쨌든 오늘은 Autohotkey 의 정규 표현식을 이용하여 음악 파일 이름 바꾸기를 하다가 제가 최근에 편리하게 사용하게 된 것들에 대해 말씀 드리겠습니다.

 

노블레스(Noblesse)-마음을다한사랑(feat김동희) 라는 이름의 음악 파일이 있습니다.

 

저는 위 파일 이름에서 괄호가 눈에 거슬려서 Autohotkey 의 정규 표현식을 이용하여 괄호를 지우려고 다음과 같이 코딩 했습니다.

 

Temp_File_name=노블레스(Noblesse)-마음을다한사랑(feat김동희) ; 음악 파일 이름

 

NewStr1:= RegExReplace(Temp_File_name, "\(.*\)") ; 괄호와 그 안의 내용 지우기, 탐욕스러운 수량자

MsgBox, %NewStr1% ; 결과 확인

 

위 코드에 대해 간단하게 설명 하면, Autohotkey 에서 정규표현식을 이용하여 매치되는 글자를 변경할 때 사용하는 함수인 RegExReplace()를 사용하여 괄호 [( )]와 그 안의 모든 글자 [ .* ] 를 지우려 했습니다. 여기서 괄호 앞쪽에 \ 이 붙은건 글자 그대로의 괄호를 인식 시키기 위해 \(, \) 이렇게 표현한 겁니다.

 

위 코드의 결과는 이렇게 나옵니다. 제 생각되는 다르게 (Noblesse)-마음을다한사랑(feat김동희) 부분이 다 지워지더군요.

 

 

그래서 정규표현식에 대해 좀 뒤지다 보니… 수량자는 탐욕스러운 연산을 한다고 하네요… 따라서 (Noblesse), (feat김동희) 만 쏙 빼서 지우고 싶으면 탐욕스럽지 않은 연산자를 사용해야 한다고 합니다.

 

그렇담 탐욕스럽지 않은 연산자는 어케 사용하느냐 봤더니 무쟈게 간단하더군요. 걍 수량자 뒤에 물음표 ? 하나만 붙이면 됩니다. ㅋㅋㅋㅋ

 

그래서 탐욕스럽지 않은 연산자로 수정한 코드는 다음과 같습니다.

 

Temp_File_name=노블레스(Noblesse)-마음을다한사랑(feat김동희) ; 음악 파일 이름

 

NewStr2:= RegExReplace(Temp_File_name, "\(.*?\)") ; 괄호와 그 안의 내용 지우기, 탐욕스럽지 않은 수량자

MsgBox, %NewStr2% ; 결과 확인

 

결과는 이렇게 괄호와 그 안의 내용만 쏙 빼서 지우고 나오더군요~~~

 

 

정규 표현식은 Perl 이 갑이긴 한데~~ Autohotkey 에서도 매우 효율적으로 이용할 수 있더군요~~

 

Autohotkey 의 정규 표현식은 Perl-compatible regular expression (PCRE) 이라고 하더군요. 뭐 딱 봐도 알겠지만 Perl 의 정규 표현식 문법을 차용해서 만들어 진 듯 합니다.


  1. 한종석 2012.04.21 20:55

    F1::
    CoordMode, Pixel, Screen
    CoordMode, Mouse, Screen
    Loop,
    {
    A::
    sleep, 500
    Imagesearch, VX, VY, 0, 0, A_ScreenWidth, A_ScreenHeight, *10 1.bmp
    sleep, 100
    if Errorlevel = 1
    sleep, 100
    {
    Goto, A
    }
    sleep, 100
    if Errorlevel = 0
    sleep, 100
    {
    MouseClick, Left, %VX%, %VY%
    Break
    }
    }
    Loop,
    {
    B::
    sleep, 100
    Imagesearch, VX, VY, 0, 0, A_ScreenWidth, A_ScreenHeight, *10 2.bmp
    sleep, 100
    if Errorlevel = 1
    sleep, 100
    {
    Goto, B
    }
    sleep, 100
    if Errorlevel = 0
    sleep, 100
    {
    MouseClick, Left, %VX%, %VY%
    Break
    }
    }
    Loop,
    {
    C::
    sleep, 100
    Imagesearch, VX, VY, 0, 0, A_ScreenWidth, A_ScreenHeight, *10 3.bmp
    sleep, 100
    if Errorlevel = 1
    sleep, 100
    {
    Goto, C
    }
    sleep, 100
    if Errorlevel = 0
    sleep, 100
    {
    MouseClick, Left, %VX%, %VY%
    Break
    }
    }
    Return
    F2::Pause
    F3::Exitapp


    스크립트 보시고 문제 좀 알려주세요..

    아예 동작을 안하네요..

    이미지를 클릭하면 기다렸다가 홈페이지 뜨면 다음으로 넘어가서

    이미지를 클릭하는걸로 짜봣는데...A를 이미지서치하고 클릭되면 B로 넘어가게요..

    잘되다가 멀 잘못 건드렸는지 전혀 동작을 안해요..

    잘될때도 이미지가 똑같았은데 계속 Goto 되면서

    이미지를 못찾는건 제가 잘못 건드린 부분이 잇는것 같아서요..

    제발 좀 알려주세요...

    • 남성 2012.04.22 15:06 신고

      다른 부분은 특별히 잘 못된 부분 잘 모르겟는데요.
      if 문 다음에 sleep 100 주는 부분의 문법이 약간 잘못된거 같다고 생각되네요.
      중괄호 {} 안에 sleep 100 이 있어야 if 문에 따라 제대로 동작 할것 같습니다.

      이상 어줍잖은 조언 이었습니다.

      방문해 주셔서 감사합니다.

 

다른 운영체제들과는 다르게 윈도우에는 기본적으로 Perl 이 설치가 안 되어 있어서 따로 Perl 을 설치를 해줘야 합니다.

 

아래 주소에서 Perl 설치가 가능합니다.

 

http://www.perl.org/get.html

 

보통은 Binaries 에 보면 ActiveState Perl 과 Strawberry Perl 이 존재 합니다.

 

ActiveState Perl 은 ActiveState 사에서 만들어서 배포하는 버전이고 Strawberry Perl100 % 오픈 소스 펄로서 CPAN client, gcc 컴파일러 등을 포함하고 있습니다.

 

CPAN 에 있는 모듈 설치 할 때 CPAN client를 사용하니 대단히 편리하더군요.

 

Perl 을 설치하고 사용 할 때는 텍스트 에디터에서 작성하고 command 창에서 작성한 코드를 실행하면 됩니다.

 

그런데 이런 과정은 아무래도 불편하긴 하죠.

 

그래서 Perl IDE 를 찾다 보니 Padre 가 나오더군요.

 

Padre 는 Multi-platform Perl IDE 로서 아래 주소에서 다운로드 받을 수 있습니다.

 

http://padre.perlide.org/download.html

 

각자 운영체제에 맞는 파일을 다운로드 하시고 설치 하시면 됩니다.

 

설치야 뭐 다음 ~ 다음~ 누르면 되니깐 설명은 생략하겠습니다.

 

Padre 를 설치하게 되면 기본적으로 Strawberry Perl 이 설치가 됩니다.

 

즉 Strawberry Perl 을 따로 또 설치 할 필요가 없다는 거죠.

 

Padre를 실행해보면 요렇게 생겼습니다.

 

 

Perl 코딩 후 바로 F5 누르면 실행해 볼 수도 있고, Perl 의 가장 큰 장점인 정규 표현 식 작성을 도와주는 Regex Editor 와 같은 툴도 있고, 다른 편리한 plugin 들도 쉽게 추가 할 수 있게 되어 있습니다.

 

 

다양한 기능들이 있으니 천천히 코딩 해가면서 익히는 것도 도움이 될 듯 합니다.

 

저도 Perl 초보인데… Padre 환경에서 작업하니 정말 편리하다는 생각이 드네요~

MS word 자동화에 대해 찾다 보니 C#, C++, VB 등을 이용한 문서 생성 방법 등이 나오더군요~

 

그러다 찾은 게 Perl 을 이용한 MS word 문서 생성 방법 입니다.

 

역시 Perl 은 역사가 깊은 만큼~ 없는 게 없군요. 굉장히 쉽고 편리하게 MS word 문서를 생성 할 수 있습니다.

 

Cpan 에서 Win32::OLE 을 설치 한 이후에 아래와 같이 코딩을 하면 문서가 뚝딱~ 만들어 집니다.

 

use warnings;

use strict;

use Win32::OLE;

 

my $word = CreateObject Win32::OLE 'Word.Application' or die $!;

$word->{'Visible'} = 0; # 화면에 보이진 않게 함, 1 로 설정하면 화면에 보이게 됨

 

my $document = $word->Documents->Add;

 

my $selection = $word->Selection;

 

$selection -> TypeText("워드 문서 생성~"); # 본문 내용

$selection -> TypeParagraph;

$selection -> TypeText("This is word document generated by perl"); # 본문 내용

$selection -> TypeParagraph;

 

$selection -> TypeText("제목"); # 본문 내용

$selection -> {'Style'} = "제목 1"; # 현재의 selection 부분에 스타일 설정

 

$selection -> TypeParagraph;

 

my $heading_1 = $document->Styles("제목 1");

my $heading_1_font = $heading_1->Font;

 

$heading_1_font -> {Name} = "맑은 고딕";

$heading_1_font -> {Size} = 20;

$heading_1_font -> {Bold} = 1;

 

$document->SaveAs('c:\generated.docx'); # c:\generated.docx 로 저장

$word->Quit();

 

 

위 코드 실행하면 다음과 같은 워드 문서가 만들어 집니다.

 

 

인터넷에서 찾은 간단한 예제 가지고 만든 거라 별거 안 나오지만 ~

 

Win32::OLE 모듈에 대해 좀더 공부한다면 훌륭한 문서 생성 자동화 방법이 될 것 같네요~


 

개인적으로 윈도우 환경에서 GVim Editor 를 주로 사용하는 편입니다.

 

뭐 vim 이야 말이 필요 없는 Editor 이니 많은 분들이 이용 할 거라 생각 되는데요.

 

일단 가볍고 OS 안 가리고 잘 돌아가고~

 

나름의 설정이나 코딩하는 맛도 있고 해서 vim을 좋아라 합니다.

 

요즘 Perl 공부를 하다가 Perl IDE 는 없나 하는 생각으로 찾다 보니….

 

역시나 Perl IDE 환경을 제공해주는 script 가 있더군요.

 



 

Perl IDE vim script 는 다음 주소에서 다운 받습니다.

 

http://www.vim.org/scripts/script.php?script_id=556

 

  • 위 주소에서 현재 가장 최신 파일인 4.11 version 파일을 다운로드 받습니다.

 

  • 다운로드 한 zip 파일을 vim 이 설치된 경로의 vimfiles 폴더에 압축 해제 합니다.

 

  • Vim 설정 파일인 .\Vim\_vimrc 파일에 아래 내용 코드가 없다면 기재한 후에 저장을 합니다.

 

:filetype plugin on

 

  • .\Vim\vimfiles\perl-support\templates\Templates 파일을 열어서 아래 기본적인 사용자에 대한 내용들을 기입하고 저장해 줍니다.

 

|AUTHOR| = YOUR NAME

|AUTHORREF| =

|EMAIL| =

|COMPANY| =

|COPYRIGHT| = Copyright (c) |YEAR|, |AUTHOR|

  


 

위 파일까지 설정을 하면 설정은 다 끝났네요.

 

이제 Gvim 을 실행하면 아래 그림처럼 Perl 메뉴가 생긴 것을 확인 할 수 있습니다.

 

 

위 그림에서 보시는 바와 같이 단축키를 이용할 수도 있는데요~

 

단축키는 아래 주소에 잘 정리가 되어 있어서 할 때마다 보면서 연습하면 될 것 같네요.

 

http://lug.fh-swf.de/vim/vim-perl/perl-hot-keys.pdf


전세계의 사람들은 어떤 프로그래밍 언어를 주로 이용할까에 대한 궁금함을 항상 가지고 있었다.

인터넷 검색을 통해 이런 궁금증을 해결해 줄 수 있는 사이트를 발견했다.

TIOBE 소프트웨어라는 회사의 홈페이지에는 한 달에 한번씩 프로그래밍 언어의 인기도에 대한 순위를 올려 놓는다.

아래 순위의 출처는 http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html 다.

이번 달의 프로그래밍 언어 인기도는 다음과 같다.

 

역시나 이번에도 1등은 자바다.

2~3 등을 하고 있는 C/C++ 야 뭐 워낙에 기본이 되는 프로그램 이니깐 할 말이 없고, 파이썬C#의 약진이 눈에 뜬다.

작년 까지만 해도 파이썬이 저 정도는 아니었던 것 같은데…… 요즘 진짜 많이 사용하는 프로그램 같다.

뭐 문법도 편리하고 여기 저기 안 붙는 데가 없으니 정말 좋은 언어라는 생각이 많이 든다.

파이썬 같은 스크립트 언어는 여러 모로 도움이 되니 프로그래밍을 하시는 분들은 꼭 한번 공부해 보시길

비트토렌트아나콘다 trac 같은 프로그램이 파이썬으로 만들어 졌고, 뭐 구글을 비롯해 NASA같은 데서도 많이 이용된다 하니 더 관심이 가는 언어 중에 하나다.

일단…… 파이썬은 공짜다. 뭐 리눅스 윈도 이런 거 안 가리고 잘 돌아가는 너무 좋은 언어다.

파이썬도 책 조금 보다 말았는데 이제 조금씩 다시 시작을 해야 하나 하는 생각이 든다.

 

요즘 관심을 가지고 공부하고 있는 perl 이 아직 순위권 내에 있는 게 반갑다. 뭐 Perl은 두말할 나위 없는 언어다…… 특히 텍스트 처리에 있어서는 타의 추종을 불허 하는 펄…… 너무 좋다. 그리고 코드가 무지 짧다. 가끔은 더럽기도.. ㅋㅋ

거기다 There's more than one way to do the same thing. 라는 펄의 철학도 넘~ 넘~ 멋지다. 난 저 한 줄에 꽂혀서 펄을 시작했다. 아직 많이 알지는 못하지만 언젠간 꼭 고수가 되었음 하는 게 펄이다.

 

이번 달에는 좀 특이한 게 NXT-G 라는 정말 듣고 보도 못한 프로그램이 순위 안에 올라 왔다.

좀 알아보니 National Instruments 라는 회사에서 만든 그래픽 프로그래밍 툴이란다. National Instruments 사는 너무나 유명한 labview 를 만든 회사다

정말 세상에는 너무 다양한 언어가 있고 공부할게 너무 많다.

저 리스트만 봐도 숨이 막힌다. 욕심 나는 언어들은 많은데…… 내 능력은 너무 보잘 것 없고….

Perl, Python, LISP, Ruby, Delphi 까지는 어케든 공부 하고 싶은데…… 아 ~~

ㅋㅋ 선택과 집중을 해야 하나……

 

현재 내가 밥 벌어 먹고 살게 해주고 있는 MATLAB 이 몇 등인지 살펴 봤다.

예전에 봤을 때는 20위권 안에 있었는데…… 지금은 29위로 밀려났다.

MATLAB 가격이 좀 싸지면 순위가 올라 갈라나……

50위 권의 순위에서는 Haskell , Fortran, Tcl, Labview 정도 욕심 난다.


+ Recent posts