Does Filename Match Pattern


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Does Filename Match Pattern
# 1  
Old 12-16-2008
Does Filename Match Pattern

Hi,

I am writing a BASH script. I have a list of files and I would like to make sure that each is of a specific pattern (ie [AT]*.L2). If not I would like to remove that file. How do I test whether a filename matches a given pattern?
Thanks a lot.

Mike
# 2  
Old 12-16-2008
Use the ls command and check its return code

Code:
ls -l [AT]*.L2  > /dev/null 2>&1

# 3  
Old 12-16-2008
Thank you for the reply! What does the "&1" indicate? Are you outputting the standard error of the ls statement?

Mike
# 4  
Old 12-16-2008
Quote:
Originally Posted by msb65
I am writing a BASH script. I have a list of files and I would like to make sure that each is of a specific pattern (ie [AT]*.L2). If not I would like to remove that file.

Code:
shopt -s extglob
rm !([AT]*.L2)

Quote:
How do I test whether a filename matches a given pattern?

Code:
case $filename in
     [AT]*.L2) printf "%s matches\n" "$filename" ;;
     *) printf "%s does not match\n" "$filename" ;;
esac

# 5  
Old 12-16-2008
Quote:
Originally Posted by msb65
Thank you for the reply! What does the "&1" indicate? Are you outputting the standard error of the ls statement?

Mike
The '&1' redirects the output of stderr to the output of stdout, which in this case is /dev/null. It could have been easily written as

Code:
ls -l [AT]*.L2  > /dev/null  2> /dev/null

The redirection of the output supresses any results or error messages. In this case you only care about the return code.
# 6  
Old 12-16-2008
Quote:
Originally Posted by cfajohnson

Code:
shopt -s extglob
rm !([AT]*.L2)


Code:
case $filename in
     [AT]*.L2) printf "%s matches\n" "$filename" ;;
     *) printf "%s does not match\n" "$filename" ;;
esac

Hi cfajohnson,

Yes I was thinking about doing that. However, the pattern that I would like to match is condition dependent. I would like to do something like this:

Code:
if [ $START_LEVEL = 0 ]; then
        PATTERN_ARRAY=('[AT]*.L0_LAC' 'MOD00.[AP]*.PDS')
elif [ $START_LEVEL = 1 ]; then
        PATTERN_ARRAY=([AST]*.L1A_[GL]AC* S*.L1A_MLAC*)
elif [ $START_LEVEL = 2 ]; then
        PATTERN_ARRAY=([AST]*.L2_[GL]AC* S*.L2_MLAC*)
elif [ $START_LEVEL = 3 ]; then
        PATTERN_ARRAY=([AST]*_*_*.L3)
fi

for ENTRY in *; do
     for PATTERN in ${PATTERN_ARRAY[@]}; do
          case $ENTRY in
               $PATTERN)
               echo 'Entry matches pattern'
               ;;
               *)
               echo 'Entry does NOT match pattern'
               ;;
          esac
     done
done

However, the shell appears to be performing the pattern matching in if statements. Is there a way to get around that? Thank you.

Mike
# 7  
Old 12-16-2008

The shell performs filename expansion anywhere you have an unquoted pattern. If you do not want it expanded, quote it.

You have unquoted patterns in your array assignments and in the array expansion.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Match filename pattern with -f

Hello All, I have two issues. 1).I want to check if directory exists and inside that if file exists with today's date minus one. I can check directory exists but how can i check only a pattern of filename in that directory.Name of file is files-20170105-09.gz. 2).Also i want to exit immediately... (6 Replies)
Discussion started by: looney
6 Replies

2. Shell Programming and Scripting

Match Pattern and print pattern and multiple lines into one line

Hello Experts , require help . See below output: File inputs ------------------------------------------ Server Host = mike id rl images allocated last updated density vimages expiration last read <------- STATUS ------->... (4 Replies)
Discussion started by: tigerhills
4 Replies

3. Shell Programming and Scripting

Rearrange or replace only the second line after pattern match or pattern match

Im using the command below , but thats not the output that i want. it only prints the odd and even numbers. awk '{if(NR%2){print $0 > "1"}else{print $0 > "2"}}' Im hoping for something like this file1: Text hi this is just a test text1 text2 text3 text4 text5 text6 Text hi... (2 Replies)
Discussion started by: invinzin21
2 Replies

4. UNIX for Dummies Questions & Answers

Match Pattern after certain pattern and Print words next to Pattern

Hi experts , im new to Unix,AWK ,and im just not able to get this right. I need to match for some patterns if it matches I need to print the next few words to it.. I have only three such conditions to match… But I need to print only those words that comes after satisfying the first condition..... (2 Replies)
Discussion started by: 100bees
2 Replies

5. Shell Programming and Scripting

Awk to match a pattern and perform a search after the first pattern

Hello Guyz I have been following this forum for a while and the solutions provided are super useful. I currently have a scenario where i need to search for a pattern and start searching by keeping the first pattern as a baseline ABC DEF LMN EFG HIJ LMN OPQ In the above text i need to... (8 Replies)
Discussion started by: RickCharles
8 Replies

6. Shell Programming and Scripting

Need one liner to search pattern and print everything expect 6 lines from where pattern match made

i need to search for a pattern from a big file and print everything expect the next 6 lines from where the pattern match was made. (8 Replies)
Discussion started by: chidori
8 Replies

7. Shell Programming and Scripting

Getting filename for Nth line pattern match

Hi, I have many scripts in particular directory. And few of the scripts have exit 0 in second line. Now i wanted to list out the scripts name which has the exit 0 in its second line I tried many options , but i can not get the filename along with the nth line pattern match :mad:. Can anyone... (14 Replies)
Discussion started by: puni
14 Replies

8. Shell Programming and Scripting

Filename pattern match and appending pipe

Hi, I have a directory with around 100k files and files with varying sizes(10GB files to as low as 5KB). All the files are having pipe dilimited records. I need to append 7 pipes to the end of each record, in each file whose name contains _X3_ and need to append 10 pipes to the end of each... (3 Replies)
Discussion started by: nss280
3 Replies

9. Shell Programming and Scripting

Match first pattern first then extract second pattern match

My input file: <accession>Q91G55</accession> <name>043L_IIV6</name> <protein> <recommendedName> <location> <position position="294"/> </location> <fullName>Uncharacterized protein 043L</fullName> <accession>P18556</accession> <name>1106L_ASFB7</name> <protein> <recommendedName>... (5 Replies)
Discussion started by: patrick87
5 Replies

10. Shell Programming and Scripting

To identify filename in which having match PATTERN

Hi, Any idea to identify bunch of files( gz format) in which having match PATTERN wanted and print out those files ? :) Regards, (14 Replies)
Discussion started by: cedrichiu
14 Replies
Login or Register to Ask a Question