Regular expressions

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • mark

    Regular expressions

    i am attempting to write a script using Net::Telnet. The script telnets to
    a machine
    logs in and issues a command to list the config. Tthe output of the command
    pauses
    about every screenfull and gives the user the prompt " --More-- ". The
    script
    contains the followin code to account fot the prompt.

    $telnet->waitfor('/-\-More\-\- $/i');
    $telnet->print('\s');

    the script does not proceed past the " --More-- " prompt. this problems
    seems to have stumpt me. does anyone have any suggestions for me?

    Thanks
    mark


  • Eric Amick

    #2
    Re: Regular expressions

    On Sun, 29 Jun 2003 21:05:50 -0500, "mark" <mark_evans029@ yahoo.com>
    wrote:
    [color=blue]
    >i am attempting to write a script using Net::Telnet. The script telnets to
    >a machine
    >logs in and issues a command to list the config. Tthe output of the command
    >pauses
    >about every screenfull and gives the user the prompt " --More-- ". The
    >script
    >contains the followin code to account fot the prompt.
    >
    >$telnet->waitfor('/-\-More\-\- $/i');[/color]

    Hyphens are special only within character classes, so I'd remove the
    backslashes for readability if nothing else. Are you absolutely certain
    the prompt ends with exactly one space?
    [color=blue]
    >$telnet->print('\s');[/color]

    This looks suspicious. Shouldn't that be a space in the quotes? You
    probably want put() instead of print(); print() sends out a newline
    automatically, and you wouldn't press return when typing it manually.

    --
    Eric Amick
    Columbia, MD

    Comment

    • mark

      #3
      Re: Regular expressions


      "Eric Amick" <eric-amick@comcast.n et> wrote in message
      news:t8cvfvgsnh cpqf9pfjkt1853j anjth9bne@4ax.c om...[color=blue]
      > On Sun, 29 Jun 2003 21:05:50 -0500, "mark" <mark_evans029@ yahoo.com>
      > wrote:
      >[color=green]
      > >i am attempting to write a script using Net::Telnet. The script telnets[/color][/color]
      to[color=blue][color=green]
      > >a machine
      > >logs in and issues a command to list the config. Tthe output of the[/color][/color]
      command[color=blue][color=green]
      > >pauses
      > >about every screenfull and gives the user the prompt " --More-- ". The
      > >script
      > >contains the followin code to account fot the prompt.
      > >
      > >$telnet->waitfor('/-\-More\-\- $/i');[/color]
      >
      > Hyphens are special only within character classes, so I'd remove the
      > backslashes for readability if nothing else. Are you absolutely certain
      > the prompt ends with exactly one space?
      >[color=green]
      > >$telnet->print('\s');[/color]
      >
      > This looks suspicious. Shouldn't that be a space in the quotes? You
      > probably want put() instead of print(); print() sends out a newline
      > automatically, and you wouldn't press return when typing it manually.
      >
      > --
      > Eric Amick
      > Columbia, MD[/color]


      ya, i tried exactly one space prior to trying the /s. ya fairly certain it
      is just one space. i was thought it might
      be sending an unprintable character for what ever reason, so i changed
      input_log to a dump_file and checked
      the last character in it. the end of the file just one character with
      character code 20. I just tried using the put in
      place of the print, but didn't seem to help.

      Thanks mark
      mark


      Comment

      • Peter Pentchev

        #4
        Re: Regular expressions

        "mark" <mark_evans029@ yahoo.com> wrote in message news:<F-SdnWyA54aWBmKjX TWJiw@www.bayou .com>...[color=blue]
        > i am attempting to write a script using Net::Telnet. The script telnets to
        > a machine
        > logs in and issues a command to list the config. Tthe output of the command
        > pauses
        > about every screenfull and gives the user the prompt " --More-- ". The
        > script
        > contains the followin code to account fot the prompt.
        >
        > $telnet->waitfor('/-\-More\-\- $/i');
        > $telnet->print('\s');
        >
        > the script does not proceed past the " --More-- " prompt. this problems
        > seems to have stumpt me. does anyone have any suggestions for me?[/color]

        There could be several problems here.

        First, input buffering could pose a problem. The Net::Telnet documentation
        explicitly states that all input is buffered; in my limited testing,
        the waitfor() method does indeed return lines that do *not* end with an
        end-of-line, but I am not sure that this will always be the case.
        In other words, the problem could be Net::Telnet's waitfor() not returning
        until a whole line has been read, and the --More-- prompt does not really
        contain a CR/LF at the end.

        Second, are you sure that the string you should be matching for is
        the exact sequence of characters '-', '-', 'M', 'o', 'r', 'e', etc?
        I mean, some pagers use the "backspace convention" (for lack of a better
        name that I can think of right now) to indicate bold, underline and such:
        for bold, the pager outputs 'M', backspace, 'M'; for underline, it prints
        '_', backspace, 'M'. If the '--More-- ' prompt is bold for some reason,
        then '--More-- ' will probably not match it.

        Those are two reasons that I can think of offhand.

        G'luck,
        Peter

        Comment

        • adey

          #5
          Re: Regular expressions

          On Sun, 29 Jun 2003 21:05:50 -0500, "mark" <mark_evans029@ yahoo.com>
          wrote:
          [color=blue]
          >i am attempting to write a script using Net::Telnet. The script telnets to
          >a machine
          >logs in and issues a command to list the config. Tthe output of the command
          >pauses
          >about every screenfull and gives the user the prompt " --More-- ". The
          >script
          >contains the followin code to account fot the prompt.
          >
          >$telnet->waitfor('/-\-More\-\- $/i');
          >$telnet->print('\s');
          >
          >the script does not proceed past the " --More-- " prompt. this problems
          >seems to have stumpt me. does anyone have any suggestions for me?
          >
          >Thanks
          >mark
          >
          >[/color]
          Hi Mark,

          I use the module all the time. The non Perl solution to your problem
          is this;

          I would suggest you command the machine to dump the whole of the
          config in one go.

          For instance, if you are attempting to list the config on a Cisco
          router, you could issue the command "term len 0" prior to issuing the
          command to list the config.

          Adey

          Comment

          Working...