Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Attn UNIX users (OT) Thanks!

Author: Matthew Hull

Date: 19:32:36 01/24/04

Go up one level in this thread


On January 24, 2004 at 22:09:15, Russell Reagan wrote:

>On January 24, 2004 at 21:25:44, Matthew Hull wrote:
>
>>Find some HTML file and process it with the following command:
>>
>>sed -e s/\<[^\>]*\>//g somefile.htm
>>
>>Now put the above sed command in a file called "test" and do the following:
>>
>>sed -f test somefile.htm
>>
>>Question:  Is the output for both methods identical on your machine?
>>
>>If not, why not?
>
>
>You need to protect the sed expression from the command line interpreter, like
>this:
>
>sed 's/\<[^\>]*\>//g' somefile.htm
>
>The command line interpreter (bash, or whatever you're using) treats certain
>characters as special. For instance, the character * expands to a file listing
>of the current directory. When you did \<, the shell converted that to just <.
>To see how this works, type these:
>
>echo *
>echo \<\>
>
>There are three ways to protect something from being interpreted by the shell.
>The first way, and weakest way, is to use double quotes, like this:
>
>sed "s/\<[^\>]*\>//g" somefile.htm
>
>The reason that is the weakest is because it still allows for shell variable
>expansion. For instance:
>
>$ foo=bar
>$ echo $foo
>bar
>$ echo "$foo"
>bar
>$ echo '$foo'
>$foo
>
>Single quotes will protect shell variable expansion, as in the example above.
>The last way is to use a backslash, which protects the character immediately
>following it:
>
>echo \$foo

Thanks very much, Russell.  I got completely confused because the unprotected
sed command was actually producing the result I was looking for, but gave a
totally different result when put in a script file.

Regards,
Matt



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.