Ls help: ls not working with start character search (^)


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Ls help: ls not working with start character search (^)
# 1  
Old 03-26-2013
Ls help: ls not working with start character search (^)

Experts,

How to list a file using ^ character, for all files started with character a. (os= hp-ux )

Code:
# ls -l 
-rw-------   1 useradm    users            0 Mar 26 14:30 abc
-rw-------   1 useradm    users            0 Mar 26 14:30 def
-rw-------   1 useradm    users            0 Mar 26 14:33 zyx
#


Code:
Trying but not working, any idea whats wrong, 
# ls -l ^abc
^abc not found

# ls -l ^a*
^a* not found

# ls ^a*
^a* not found



Thanks a lot.

---------- Post updated at 03:09 PM ---------- Previous update was at 02:46 PM ----------

Also can anyone please explain , how the ^ character not working with
Code:
ls

, for regex.




Did not work with ls: # Wanted to list which is not having first letter a .
Code:
Code:
# ls -l [^a]bc
-rw-------   1 useradm   users            0 Mar 26 14:30 abc


Worked with grep: # Wanted to list which is not having first letter a .
Code:
# ls -l | grep "[^a]bc"
-rw-------   1 useradm   users            0 Mar 26 14:48 bbc


Thanks a lot.
# 2  
Old 03-26-2013
Try:
Code:
ls -l [!a]bc

This User Gave Thanks to Scrutinizer For This Post:
# 3  
Old 03-26-2013
Important to note, it is not ls that's doing the search here, it's the shell. If you do echo [!a]bc you'll see similar results.
This User Gave Thanks to Corona688 For This Post:
# 4  
Old 03-26-2013
You can also use:
Code:
ls -l !(a)+(bc)

From KSH manual:
Code:
           ?(pattern-list)     Optionally matches any one of the given
                               patterns.

           *(pattern-list)     Matches zero or more occurrences of the given
                               patterns.

           +(pattern-list)     Matches one or more occurrences of the given
                               patterns.

           @(pattern-list)     Matches exactly one of the given patterns.

           !(pattern-list)     Matches anything, except one of the given
                               patterns.

This User Gave Thanks to Yoda For This Post:
# 5  
Old 03-26-2013
The key point that rveri seems to be missing is that the shell uses filename pattern matching (not regular expressions) when expanding the arguments that will be passed to ls. Although there are some similarities between pattern matching and regular expression, many of the details are different.
This User Gave Thanks to Don Cragun For This Post:
# 6  
Old 03-27-2013
Thanks,Scrutinizer, Corona, Yoda First 3 worked.. to list all files NOT starting with a :




# Worked well: Seems matching is passed to ls command: " ls -l [!a]bc "
Code:
# ls -l ab[c]
-rw-------   1 useradm    users            0 Mar 27 12:57 abc


# ls -l [!a]bc
-rw-------   1 useradm    users            0 Mar 26 15:27 bbc

# Worked well: Seems matching is passed to shell.
Code:
# echo [!a]bc 
bbc

This is too worked fine, seems matching is done through shell.
Code:
# ls -l !(a)+(bc)
-rw-------   1 useradm    users            0 Mar 26 15:27 bbc
-rw-------   1 useradm    users            0 Mar 26 15:27 bbcabc
-rw-------   1 useradm    users            0 Mar 26 15:27 bbcbbc
#


Yoda, thanks for the manual page,

Don thanks for pointing out the difference of use when "shell uses filename pattern matching" & when "Regular expression uses pattern matching".
Is there a way we can figure out which is shell doing, and which is doing by regular expressions.


For example with the below example: How to figure out which portion is shell or regex performing the operation:

Code:
# ls -l bbcbbc
-rw-------   1 useradm    users            0 Mar 26 15:27 bbcbbc


# ls -l !([c-z])?[c][b][b][b-d]
-rw-------   1 useradm    users            0 Mar 26 15:27 bbcbbc


echo $SHELL
/usr/bin/ksh
#OS= hp-ux 11.23


Thanks..
# 7  
Old 03-27-2013
Quote:
Originally Posted by rveri
... ... ...

Don thanks for pointing out the difference of use when "shell uses filename pattern matching" & when "Regular expression uses pattern matching".
Is there a way we can figure out which is shell doing, and which is doing by regular expressions.


For example with the below example: How to figure out which portion is shell or regex performing the operation:

Code:
# ls -l bbcbbc
-rw-------   1 useradm    users            0 Mar 26 15:27 bbcbbc


# ls -l !([c-z])?[c][b][b][b-d]
-rw-------   1 useradm    users            0 Mar 26 15:27 bbcbbc


echo $SHELL
/usr/bin/ksh
#OS= hp-ux 11.23


Thanks..
In general, the answer is to read the man pages. But as a high altitude first cut, any unquoted argument passed to the shell that is not a parameter expansion (i.e., $name or ${...name...} that is not part of a shell command lanuage construct (e.g., if, then, else, fi, case, esac, ...) will be subject to pathname expansion.
This User Gave Thanks to Don Cragun For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How can I search with start and end criteria?

Hello I'm using cygwin and wouldlike extract information from an xml file according specific values, but don't know how. Let's say in a file content looks like this: <tab> SURNAME=Mustermann NAME=Max CUSTOMER SINCE= 18.01.2000 ADDRESS=Birmingham ... (2 Replies)
Discussion started by: witchblade
2 Replies

2. Shell Programming and Scripting

Perl - start search by using search button or by pressing the enter key

#Build label and text box $main->Label( -text => "Input string below:" )->pack(); $main->Entry( -textvariable => \$text456 )->pack(); $main->Button( -text => "Search", -command => sub { errchk ($text456) ... (4 Replies)
Discussion started by: popeye
4 Replies

3. UNIX for Dummies Questions & Answers

Appending a character(#) with string search at the start of the line

Hello, I have been browsing through the forum, but unable to find a solution for my requirement. I need to go through a file and search for /home/users and insert a # symbol at the start /home/users. Example output is #/home/users. Can you please help me with the awk or sed command for... (1 Reply)
Discussion started by: chandu123
1 Replies

4. Shell Programming and Scripting

how to specify start and stop of a search string

I am trying to extract a string from a line of text. Currently I am using grep -o 'startofstring(.........' The string is not always the same size. The string I'm trying to extract starts with 'test(' ends with ')'. ex "blah,blah,blah,test(stringoftext),blah blah" How do I... (4 Replies)
Discussion started by: jeepguy
4 Replies

5. Shell Programming and Scripting

How to start working with GNU PLOT??

Dear Experts, I wanted to plot a graph with respect to values from a file. I'm doing it with Excel 2007, but I want to create the chart in script itself. I searched in internet for GNUPLOt. But I couldn't understand anything. Here is my situation. I have a file having values separated by "|".... (7 Replies)
Discussion started by: Naga06
7 Replies

6. Shell Programming and Scripting

escape character not working

I need to change a pattern with single quotes # echo "serversignature: 'On'" serversignature: 'On' I did # echo "serversignature: 'On'" | sed 's/.*serversignature.*/serversignature: 'Off'/' serversignature: Off The output I need is with single quotes. But its swallowing it. ... (2 Replies)
Discussion started by: anilcliff
2 Replies

7. Slackware

pppoe-start not working

Hello. I'm new here and i'm new to slack (concept) as well. I made a connection for pppoe with pppoe-setup, bringed up eth0 with ifconfig but when i try pppoe-connect i get "Cannot determine ethernet address for proxy ARP" and with pppoe-start i get "child pppd process terminated". How can i make... (0 Replies)
Discussion started by: editheraven
0 Replies

8. Solaris

Solaris 10, start inetd in a zone not working

Hello all, I`ve the following problem - I cannot start inetd in any way possible: bash-3.00# svcs inetd STATE STIME FMRI offline Jul_30 svc:/network/inetd:default bash-3.00# bash-3.00# svcadm enable -r inetd bash-3.00# svcs inetd STATE STIME FMRI... (6 Replies)
Discussion started by: click
6 Replies

9. Shell Programming and Scripting

read a string from its end to its start and stop when you find a specific character

How can I do this? Actually I have a file which contains a path e.g. /home/john/Music/hello.mp3 and I want to take only the filename (hello.mp3) So, I need to read the file from its end to its start till the character "/" Is this possible? Thanks, I am sure you'll not disappoint me here! Oh,... (9 Replies)
Discussion started by: hakermania
9 Replies

10. UNIX for Dummies Questions & Answers

Working out end time from start + elapsed

Hi, I'm writing a script and have become stuck trying to define a variable (COMP) by adding an elapsed time (ELAPSE e.g 00:55) to a start time (START e.g 23:50). Can anybody give me a solution as to how I can get a completion time in hh:mm from the variables above? thanks Richard (4 Replies)
Discussion started by: rik1551
4 Replies
Login or Register to Ask a Question