[완료]egrep과 문자열 사용에 관하여.

Hilzzle의 이미지

안녕하세요. 가입한지 33주나 됐지만 그동안 한번도 활동하지 않다가
처음으로 글을 올리네요..

리눅스에서
쉘 스크립트를 작성하는 걸 하고 있는데 의문점이 생겨서 왜 그런지 궁금하여
글을 올리게 되었습니다.

의도한 것은 egrep으로 and 검색을 하기 위해서 egrep [찾는문자] [대상파일] | egrep [찾는문자] < 이걸 이용하여 스크립트를 작성하려는 것입니다.
--------------------------여기서부터 코드 시작 -----------------------------
for arg
do
case "$string" in
"" ) string="$arg" ;;
* ) string2="$string2 | egrep $arg" ;; <-문제가 되는 부분인데 .. 이런식으로 위에 처럼 문자열을 만들었습니다.
esac
done

str="$string"

if [ "$string2" = "" ]
then
egrep -i $str mydata | awk -f display.awk
else
egrep -i $str mydata $string2 | awk -f display.awk <-- 그리고 매개변수가 2개 이상일 경우 이걸 실행하도록 했는데.
fi 이것이 실행이 되면 문제가 생깁니다.

-----------------------------------코드 끝--------------------------------------------
<실행 예>

./program 123 45 이런식으로 실행을 하면

egrep: |: No such file or directory
egrep: egrep: No such file or directory
egrep: 45: No such file or directory

이런식으로 뜨네요.. mydata파일 내부에 분명 45라는 것도 존재하지만
왜 $string2 라는 변수에 문자열을 저장하고 그걸 egrep에 넣어서 쓰면 명령어로 인식을 못하고
저렇게 되는지 도무지 감을 못 잡겠습니다.
흠... 어떤 문제가 있는건가요. 제가 완전 초보자라 그런지 아무의심없이 될거같았던 것이 안되서 당황스럽고,, 질문할 사람도 없고
갑자기 예전에 가입했던 이 곳이 생각나서 글을 올려보았습니다.
이런 식의 질문이 이곳의 예의에 어긋나는게 아닐지 걱정스럽지만 도움을 주시면 감사하겠습니다 :)

raymundo의 이미지

str="ls /etc"
$str | more

위는 잘 동작하지만
str="ls /etc | more"
$str

ls: |: No such file or directory
ls: more: No such file or directory
/etc:
acpi                   iproute2                       printcap
adjtime                issue                          profile
...

요컨데, 변수 안에 들어 있는 파이프와 그 뒤에 오는 다른 명령어를 파이프로 취급하지 못하고 ls 의 인자로 넘겨버리는 걸 볼 수 있습니다.

해결책은 eval

str="ls /etc | more"
eval $str

:-D

좋은 하루 되세요!

Hilzzle의 이미지

적절히 사용하여 프로그램 완성 했습니다.

댓글 달기

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