Re: bash, grep, and regular expressions
On Friday 18 Feb 2005 16:38, Freddy Freeloader wrote:
> Matt Zagrabelny wrote:
> >>I have ls aliased to ls -al. What I've been attempting to do with grep
> >>and regular expressions is list only non-hidden directories and/or
> >>files. I am unable to come up with an expression that will elimate
> >>hidden files and return non-hidden files at the same time.
> >
> > the last sentence above is a little misleading. ls does that by default.
> >
> > so examples of what you want are:
> >
> > .bashrc
> > something.cc
> > bin/
> >
> > examples of what you dont want are:
> >
> > .ssh/
> > .gnome2/
> >
> > is this correct?
> >
> > -matt zagrabelny
>
> What I'm trying to do is return something like this
>
> test.txt
> bin/
>
> rather than
>
> .ssh/
> test.txt
> bin/
> .bashrc
>
> I have found some regular expressions that will filter out specific
> files and extensions, but not something that will filter exclusively on
> the . that signfies a hidden file or directory. The best luck I've had
> in filtering is to do something like this:
>
> ls -al | grep -e ^d | grep -e '[.][a-z]'
>
> This will filter to return directories only with the first grep command
> and then the second grep will return only hidden directories that begin
> with small caps. However, where I run into problems is:
>
> ls -al | grep -e ^d | grep -e '[^.][a-z]'
>
> You would think this would return only directories that begin with
> anything except . and begin with lower case letters. This however is not
> true. It returns all directories and ignores case altogether.
Your search matches any string in the line that contains something that is not
a period, followed by a lower case letter.
This matches pretty much anything.
What you want to do is limit this somewhat!
A better idea would be to match two numbers followed by a space, followed by
your letter.
What works for me is:
ls -al | grep -e ^d | grep -e ':[0-9][0-9] [^\.][a-zA-Z]'
HTH.
Reply to: