perl에서 특정문자가 들어간 줄 모두 지우기

멀뚱이의 이미지

vi에서는 :g/지울단어/d

이렇게 입력하면, "지울단어"가 포함된 모든 줄이 삭제됩니다.

perl에서는 이것을 어떻게 구현하나요?

JEEN의 이미지

전 emacs 에서 ctl+s 로 검색해서 그 줄을 del 키 눌러서 지웁니다.
...
..
가 아니라.. perl 에서 그 줄을 삭제라는 것은 어떤 개념인지 모르겠지만..

제가 이해하기로는 어떤 파일을 읽고, 그 단어가 들어있으면 그 줄을 안찍는다 이런 걸로 이해를 했는데 맞나요?

그런 것은 ... http://doc.perl.kr/twiki/bin/view/Wiki/WebIRC 에 접속하시면 많은 분들이 가르쳐 주실겁니다.

:-) 그리고 직접 답변을 달아놓으시는 것도 괜찮은 방안이라고 생각합니다.
________
use perl;

use perl;

멀뚱이의 이미지

# wiki1.pl
use LWP::Simple;
$html = get( "http://ko.wikipedia.org/w/api.php?action=query&list=recentchanges&rclimit=500&format=yamlfm" );
$html =~ s/title/\rtitle/g;
$html =~ s/title: |/abcd/g;
$html =~ s/title: >/abcd/g;
$html =~ g!/title:/d;
$html =~ s/title: /\[\[/g;
$html =~ s/$/\]\]/g;
open(FILE, ">bom1");
print FILE $html;
close(FILE);

여기에서,

$html =~ g!/title:/d;

이걸 어떻게 해야 하는지 모르겠어요. :(

amorette의 이미지

$html =~ g!/title:/d; 에서 !는 무슨뜻인가요?

JEEN님 말씀데로, 해당 단어가 있으면 파일에 출력을 하지 않는게 가장 좋을 것 같습니다.
지우고 싶으시다면,
$html =~ s/$(?:.*?)단어(?:.*?)^//g;

이렇게 해야할 것 같은데.. 좀 dirty하네요.

amorette의 이미지

올려주신 코드를 이해 못하겠습니다.

if ($line =~ /title/)

이렇게하면 title 이 있으면 이 조건을 실행할 것입니다.

my $html = get("http://ko.wikipedia.org/w/api.php?action=query&list=recentchanges&rclimit=500&format=yamlfm");
my @html = split /\n/, $html;

이렇게 한 문장씩 배열에 담고,

foreach my $line (@html) {
    if ($line =~ /title/) {
        ###title 이 있으면..........
        ###이부분 실행..............
    }
    print $line;
}

이런식으로 하면 어떨까요.

amorette의 이미지

원하시는 것과는 다를 것 같습니다;ㅁ;

# wiki1.pl
 
use strict;
use warnings;
use LWP::Simple;
my $html = get("http://ko.wikipedia.org/w/api.php?action=query&list=recentchanges&rclimit=500&format=yamlfm");
 
open (FH, ">bom1") or die "error on opening a file.\n";
 
while ($html =~ m{
    title: (.*?) rcid: }sxg) {
 
    my $title = $1;
    $title =~ s/ (\||>)\n//g;
    print FH $title, "\n";
}
 
close FH;
aero의 이미지

라인단위 처리면 출력파일을 열어서 입력에서 한 줄씩 읽어서 매칭되면 안찍고
매칭되지 않으면 찍으면 되겠지만 위 처럼 LWP 모듈을 사용해서 html 내용을
가져 왔다면 이미 newline문자를 포함한 모든 내용이 하나의 문자열으로 들어가게
되므로 그 상태 그대로 원하는 결과를 얻으려면 다음 테스트 코드와 같은 형식으로
하시면 됩니다.

#!/usr/bin/perl
use strict;
use warnings;
 
my $content = do { local $/; <DATA> };  # slurp으로 내용을 모두 $content에 넣는다.
$content =~ s/^\s*?title:.*?\n//mg;      # title: 이 들어간 줄을 지운다.
print $content;
 
__DATA__
You are looking at the HTML representation of the YAML format.
HTML is good for debugging, but probably is not suitable for your application.
See complete documentation, or API help for more information.
 
---
query-continue:
  recentchanges:
    rcstart: |
      2008-07-08T20:26:24Z
query:
  recentchanges:
    -
      type: edit
      ns:
      title: 관성 항법 장치
      rcid: 2093984
      pageid: 108109
      revid: 2057605
      old_revid: 1666730
      timestamp: |
        2008-07-09T01:51:35Z
    -
      type: edit
      ns:
      title: 베이루트
      rcid: 2093983
      pageid: 46272
      revid: 2057604
      old_revid: 1954411
      timestamp: |
        2008-07-09T01:51:25Z

결과

You are looking at the HTML representation of the YAML format.
HTML is good for debugging, but probably is not suitable for your application.
See complete documentation, or API help for more information.
 
---
query-continue:
  recentchanges:
    rcstart: |
      2008-07-08T20:26:24Z
query:
  recentchanges:
    -
      type: edit
      ns:
      rcid: 2093984
      pageid: 108109
      revid: 2057605
      old_revid: 1666730
      timestamp: |
        2008-07-09T01:51:35Z
    -
      type: edit
      ns:
      rcid: 2093983
      pageid: 46272
      revid: 2057604
      old_revid: 1954411
      timestamp: |
        2008-07-09T01:51:25Z

정규식에서 g와 함께 m modifier를 사용했는데 이에 대한 자세한 설명은
http://gypark.pe.kr/wiki/Perl/%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D
에서 찾아보시면 됩니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.