[lug] Regex from shell
Budyanto Himawan
budyanto_himawan at yahoo.com
Fri Nov 19 14:41:47 MST 2004
Hey...thanks a lot.
This was what I was looking for
kill 111{0,1,2,3,4,5,6,7,8,9}.
But this
kill $( seq 1110 1119 ) is a whole lot more elegant.:)
Thanks Again
--- Tkil <tkil at scrye.com> wrote:
> >>>>> "Budyanto" == Budyanto Himawan
> <budyanto_himawan at yahoo.com> writes:
>
> Budyanto> Is there a way to specify a shell command
> mixed with regular
> Budyanto> expression?
>
> First minor twiddle: the shell wildcard system is
> usually called
> "globbing"; while it took some ideas and parts of
> notation from
> typical regular expression systems, it is not
> regular expressions.
>
> Something I wrote up on this a few years back:
>
>
>
http://groups.google.com/groups?selm=glnqtgszo.fsf%40scrye.com&output=gplain
>
> Budyanto> for example I want to kill all processes
> with pids 1110 to
> Budyanto> 1119
>
> Budyanto> I want to do something like "kill
> 111[0-9]".
>
> Budyanto> I tired a few different combo of the above
> and none seems to
> Budyanto> work. I know there must be something like
> that cause I used
> Budyanto> to know it but I just can't seem to
> recall.
>
> This fails because the shell does globbing (at least
> with "*", "?",
> and bracket expressions as above) only against
> filenames in the
> current working directory.
>
> To clarify: the shell does the globbing, not the
> command (on unix; on
> dos, the command is responsible for interpreting
> it's arguments!).
> Generally, that globbing is done by searching for
> matches from a
> particular set of strings. By default, that set of
> strings is the
> list of filenames in the current working directory.
> You are asking
> the shell to search over the set of strings
> comprising the active
> processes on your system -- which it might very well
> be able to do,
> but I don't know how to ask it to do so. :)
>
> There is another form of globbing that actually
> generates values, the
> braces version. You could do:
>
> kill 111{0,1,2,3,4,5,6,7,8,9}
>
> For sequences like that, consider using 'seq' to
> generate the needed
> numbers. As I mentioned in a different reply:
>
> kill $( seq 1110 1119 )
>
> Finally, if these are all the same process, and the
> only instances of
> that process on your system, take a look at
> 'killall'.
>
> A few other cheap tricks... Since Linux (in most
> distributions, at
> least) has an entry in /proc for every process-id
> that is currently
> active, you actually can use globbing on it:
>
> kill $( cd /proc; ls 111? )
>
> If you don't have the /proc filesystem, you can use
> true regular
> expressions (with 'grep', 'awk', or 'perl') to
> grovel through the
> output of 'ps':
>
> kill $( ps -A -o pid | grep '^111.$' )
>
> t.
>
=====
===========================
Budyanto Himawan
budyanto_himawan at yahoo.com
===========================
__________________________________
Do you Yahoo!?
The all-new My Yahoo! - Get yours free!
http://my.yahoo.com
More information about the LUG
mailing list