(ㅠㅠ) perl을 이용한 파일 내용 치환 관련 질문...

foruses의 이미지

안녕하세요.

예를 간단히 들면요,
cal.txt란 파일 내용 중, JAN을 January로 바꾸기 위해,
그냥 csh에서 하던 습관대로 아래처럼 하면, Jan이 January로 바뀌지 않고,
의도하지 않게 ${name} 전체로 치환이 되버리는군요.

해결 방법이 있는지요.

set name = "Januaryary"
perl -pi -e 's/JAN/${name}/g' cal.txt

감사합니다.

churky75의 이미지

perl -pi -e "s/JAN/${name}/g" cal.txt

이러면 되네요

foruses의 이미지

근데,
작은 땀표, 큰 땀표 차이가 모지요?

aero의 이미지

'는 내부의 쉘변수를 보간(interpolation)하지 않고
"는 내부의 쉘변수를 보간합니다.

echo 's/JAN/${name}/g'

echo "s/JAN/${name}/g"

UNIX에서 Perl oneliner를 사용할 때는 다음과 같이 ' '를 씁니다.

perl -e 'print 1'

" "을 쓰면 UNIX shell이 " "내부의 코드들의 Perl변수 부분을 쉘 변수로 보간해 버리기 때문이죠

perl -e "my $a=1; print $a"
syntax error at -e line 1, near "my ="

위에서 $a라는 쉘 변수가 없기 때문에 실제로 Perl에는 'my =1; print' 라는 스트링이 넘어가서 에러가 발생합니다.
" "를 써서라도 동작하게 하려면 Perl 스칼라 변수의 sigil인 $를 \로 이스케이핑해주면 됩니다.

perl -e "my \$a=1; print \$a"
1

하지만 ' '을 쓰면 이러한 문제가 없죠.

perl -e 'my $a=1; print $a'
1

따라서 UNIX의 Perl onliner에서 " "을 쓰는건 어떤 경우에 만족하는 결과가 나왔다고 해도 추천하지 않습니다.

저 같으면 쉘 변수를 정의하고 Perl oneliner 내부에서 불러쓴다면

perl -pi -e 's/JAN/$ENV{name}/g' cal.txt

처럼 하겠습니다. Perl에서 $ENV{환경변수이름}은 해당 이름을 가지는 쉘 환경변수를 뜻하고
Perl에서 정규표현식내부는 변수를 보간(interpolation)하므로 원하는 결과가 얻어집니다.

익명 사용자의 이미지

1

댓글 달기

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