Negation in Bash Globbing


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Negation in Bash Globbing
# 1  
Old 11-10-2014
Negation in Bash Globbing

Code:
$ ls -1
a.1
b.1
x_a.1
x_b.1

$ ls -1 [^a]*
b.1
x_a.1
x_b.1

$ ls -1 *[^a]*
a.1
b.1
x_a.1
x_b.1

The last result is not as expected.
Why?
Thanks.
# 2  
Old 11-10-2014
Hello carloszhang,

While using * the preceding item will be matched zero or more times. Here you haven't mentioend any thing in last expressions so it is taking everything as a match. Also * to be considered as a greedy character so it will go for maximum search of the characters.

So either you do ls -1 *[^a]* or ls -l * I think it should give you same results.


Thanks,
R. Singh
This User Gave Thanks to RavinderSingh13 For This Post:
# 3  
Old 11-10-2014
What RavinderSingh says is correct for regexes, but not for shell globbing. * itself is the wildcard character, matching any sequence of any chars.

So - *[^a]* will match anything followed by a non-"a" char followed by anything. that would exclude only filenames consisting of nothing but "a"s

---------- Post updated at 13:38 ---------- Previous update was at 10:52 ----------

As you are using bash, did you consider extended pattern matching? man bash:
Quote:
If the extglob shell option is enabled using the shopt builtin, several extended pattern matching operators are recognized.
. . .
!(pattern-list)
Matches anything except one of the given patterns
These 3 Users Gave Thanks to RudiC 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

File globbing order

Hi , I'm facing a different behaviour with one of my shell script for last few days. It was working good before that. here is my code for the script FileRemove.sh #get the file name# file1=$1 file2=$2 rm $file1 # delete the old file mv $file2 <target path> #move the new file to the target... (5 Replies)
Discussion started by: poova
5 Replies

2. UNIX for Dummies Questions & Answers

File globbing questions

hi guys, jus some file globbing questions sed "s/^.*on//" what does the full stop and asterisk means? i onli know that ^ means inverse or not (1 Reply)
Discussion started by: ment0smintz
1 Replies

3. Shell Programming and Scripting

Globbing or not globbing

Hi guys, Here is a simple script. It writes the current time to specific files in a directory. The arguments are the names of the files to write the date to (without path nor extension). root:~# cat /usr/local/bin/dummy.sh #!/bin/sh -e for file in $@; do date >> /var/lib/$file.dat... (11 Replies)
Discussion started by: chebarbudo
11 Replies

4. Homework & Coursework Questions

Negation

Hello, have anybody any idea, how to negate some expression? I have code that greps somethnig and I want filter from it some results...How to make it? IDontWantThisExpression=$1 grep 'some regex' | grep '$IDontWantThisExpression' testfile.txt Thanks for any advices. Faculty of... (2 Replies)
Discussion started by: Dworza
2 Replies

5. Shell Programming and Scripting

if statement negation

Hi all, I've been searching the internet and can't find an answer to this. Im trying to figure out how to negate a whole expression befor an if. I'll explain below. Let's say x=0 y=1 ] (this is false) I would like to negate this whole boolean condition. To negate the above... (4 Replies)
Discussion started by: rethymno19
4 Replies

6. Shell Programming and Scripting

globbing, $# is too high after wildcard expansion in bash script

How can I pass in an argument such as "*.k" to a bash script without having to double-quote *.k and not having *.k `glob` to match all files in the pattern? I tried using noglob in my script but this didn't work the way I thought it would.. expansion is still occuring, $# is higher than I... (3 Replies)
Discussion started by: zoo591
3 Replies

7. Shell Programming and Scripting

negation in find path

Guys, Pl suggest me how to ignore a path in find command... I am aware of using "!" for other option... but how can i use it like this exampl... I want to search something for in / but not in Pl help. Thanks.. (2 Replies)
Discussion started by: clx
2 Replies

8. Shell Programming and Scripting

Bitwise negation

I am taking an online course on Unix scripting. The topic is Unix arithmetic operators and the lesson is Logical and bitwise operations. It is not clear how much storage space Unix uses to represent integers that are typed. Bitwise negation caused me to question how many bits are used to... (3 Replies)
Discussion started by: dLloydm
3 Replies

9. Shell Programming and Scripting

Globbing slash Wildcarding Question

I am on HP-UX and I am trying to come up with a method to call in a list of files named like so. filename020107.dat filename020207.dat filename020307.dat Obviously I can list them ls them like so, ls filename*.dat. In case you did not notice the number is a date and I was hoping to match... (4 Replies)
Discussion started by: scotbuff
4 Replies

10. Shell Programming and Scripting

awk / bash globbing question

I would like to process a list of files matching: GPS*\.xyz with an awk script. I would then like to output the files to GPS*\.xyz.out (e.g. the same file name appended with .out). Something like: awk '{if(NR==1) {offset=-$1}; $1=$1+offset; print }' GPS*.xyz this does exactly what I want EXCEPT... (3 Replies)
Discussion started by: franzke
3 Replies
Login or Register to Ask a Question