perl로 여러 줄 grep하는 방법에 대한 질문

esrevinu의 이미지

KLDPWiki:PerlCommandLineCookBook 의 여러 줄의 데이터를 grep하기 ( http://wiki.kldp.org/wiki.php/PerlCommandLineCookBook#toc )에서 두번째 예가 이해가 안 되네요. -ne 옵션은 뭔지 아는데 match(맞죠?)의 리스트(/START_FLAG/ ... /END_FLAG/)가 어떻게 작동해서 START_FLAG가 나오면 출력을 시작하고 END_FLAG가 나오면 출력을 끝내는지 모르겠습니다.

pung96의 이미지

-n 옵션은 뒤의 파일이나 Standard in을 while루프로 처리하라는 뜻이고
-e 옵션은 뒤에 perl 구문이 온다는 뜻이죠.

...은 먼저 ..을 이해하여야 하는데 ..은 구문에 따라 몇가지 기능이 있습니다.

..연산자는 scalar를 반환하는 구문과 list를 반환하는 구문 두가지로 나뉘는데 지금 사용된 경우는 scalar를 반환하는 구문입니다.

이경우에는 /A/../B/ 라고 했을때 루프 안에서 false를 반환하다가 A가 매치되는 순간 true를 반환해서 계속 true를 반환하다가 /B/가 매치되는 순간 false를 다시 반환하기 시작합니다.
n .. m 이라고 하면 n줄부터 m줄까지 true를 반환합니다.
마찬가지로 n .. /A/ 형태로도 사용할 수 있습니다.

문제는 /A/ .. /B/라고 했을때 A, B가 둘다 한줄에서 매치가 되면 그줄에서만 True를 나타내기 때문에
/A/ .. /A/ 형태로는 사용할 수가 없습니다. 이경우 ...연산자를 쓰면 무조껀 다른 라인에서 있다고 가정하게됩니다.

실제로 perl코딩을 할때 리스트를 반환하는 경우에 오히려 더 많이 쓰게 되는데
(1..5) 는 (1,2,3,4,5) 를 의미하게 됩니다.
예를 들어 for($i=0;i<=100;i++){} 의 경우 간단히 for $i (1..100){} 로 쓰면 됩니다.
위키에 있는 것 중에 $a{@ARGV}=(A..Z) 같은 구문 도있는데 이경우 (A..Z)는 (A,B,C,...,Z를 의미하게 됩니다.

esrevinu의 이미지

아래가 좀 짤린 것 같네요. 하지만 도움이 많이 되었습니다.
n .. /A/ 는 $. == n .. $_ =~ /A/ 의 줄임말인 거죠? .. 연산자의 새로운 의미를 알았네요.
Beginning Perl 책을 조금 봤는데 책에 이런 말은 없던데...

감사합니다.
--
foldl (flip (:)) [] "universe"

pung96의 이미지

네 사실 엄밀히 생각하면 $.==n 이 되는건 약간 억지 같기도 하지만 sed에서 지원되는 기능이고
또 펄의 철학이 워낙 오픈되어이다보니까 그렇게 생각하면 또 그럴 듯하다는 생각이 듭니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.