[Linux] egrep 명령에서 정규식 사용 Develop Tip

최근 필요에 따라 몇개의 PHP 파일을 Python으로 바꾸어 보았습니다.

그런데 어떤 필요가 생겼냐면,
파이썬 파일 안에 원 소스의 ...php 파일을 표시해 두었는데,
모든 (unique) 원본 php 파일만을 추출하고 싶어졌습니다.

일단 php 파일 이름을 찾아내기 위한 정규식은

"[A-Za-z_0_9]+\.php"
과 같은 식으로 표현 가능합니다.

이것을  모든 파이썬 파일에서 검색을 하기위하여

$ grep "[A-Za-z_0_9]+\.php" *.py
했더니 결과가 나오지 않는 것이었습니다.

대신 정규식 확장 검색을 위하여 egrep을 이용하였더니,
$ egrep "[A-Za-z_0_9]+\.php" *.py
basemethod.py: @note lib.php : 1955
basemethod.py: @note mod_etc_script.php : 26
lib.py: lib.php
lib.py: @note lib.php : 801
...

등과 같이 결과가 나타났습니다.

이제는 매칭된 결과만 나타나게 하고 싶어 찾아보았더니,
-o 옵션을 주면 되었습니다.

$ egrep -o "[A-Za-z_0_9]+\.php" *.py
basemethod.py:lib.php
basemethod.py:mod_etc_script.php
lib.py:lib.php
lib.py:lib.php
...

그런데, 앞에 매칭된 파일이름은 제외 시키고 싶어졌습니다.
찾아보았더니, -h 옵션을 주면 되는 것이었습니다.

$ egrep -oh "[A-Za-z_0_9]+\.php" *.py
lib.php
mod_etc_script.php
lib.php
lib.php
...

이제는 중복된 것만 제거하면 됩니다.

$ egrep -oh "[A-Za-z_0_9]+\.php" *.py | sort -u
lib.php
mod_etc_script.php
...

이로써 원하는 결과를 얻을 수 있었습니다.

다시한번 명령행의 막강함을 기억하며,
누군가에게는 도움이 되기를 바랍니다.


덧글

댓글 입력 영역

구글애드텍스트