pattern parsing


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting pattern parsing
# 1  
Old 11-09-2010
pattern parsing

Can somebody show me an example of of using either '#' or '?' to remove
part of string.

I am reading files from directories and I want to check if file ends with *.log *.dmp or begins with a arch_*

I DONT want to use AWK or SED to do this since there maybe 1000's of files I need to test and this will slow me down. Therefore I want to try shell pattern matching, which I believe would be much faster.

I am trying to get something like this to work:

[code]

This is my attempt to try and remove the 'xxx' from 'xxx.dmp' and only
try to get the '.dmp' part.

filename=xxx.dmp
x="${filename%.}"

Also an example of how to remove everthing AFTER "arch_" would be
appreciated too.

Ie:

filename=arch_1234_hello here I want to remove "1234_hello"

[\code]
# 2  
Old 11-09-2010
The ksh end chewers are pound on the nose and get a percentage in the end. Twice is aggressive.
Code:
 
x=/a/b/c/d 
${x##*/} is d (chew nose aggressive anything to slash)
${x%/*}  is /a/b/c (chew end lightly slash and anything following)

This User Gave Thanks to DGPickett For This Post:
# 3  
Old 11-09-2010
Code:
filename=xxx.dmp
echo ${filename/${filename%%.dmp}/}
.dmp

Code:
filename=arch_1234_hello
echo ${filename/${filename##arch_}/}
arch_


Last edited by purdym; 11-09-2010 at 12:22 PM..
# 4  
Old 11-09-2010
Thanks guys
# 5  
Old 11-09-2010
? and * are the one and many char wild cards like file name globbing.

Man Page for ksh (All Section 1) - The UNIX and Linux Forums

Code:
       ${parameter}
          The  shell reads all the characters from ${ to the matching } as
          part of the same word even if it contains braces or  metacharac-
          ters.   The value, if any, of the parameter is substituted.  The
          braces are required when parameter  is  followed    by  a  letter,
          digit,  or  underscore  that is not to be interpreted as part of
          its name, when the variable name contains a ..  The  braces  are
          also  required  when a variable is subscripted unless it is part
          of an Arithmetic Expression or  a  Conditional  Expression.   If
          parameter  is one or more digits then it is a positional parame-
          ter.  A positional parameter of more  than  one  digit  must  be
          enclosed    in braces.  If parameter is * or @, then all the posi-
          tional parameters, starting with $1, are substituted  (separated
          by  a  field  separator character).  If an array vname with sub-
          script * @, or of the form sub1 ..  sub2.   is  used,  then  the
          value  for  each of the elements between sub1 and sub2 inclusive
          (or all elements for * and @) is substituted, separated  by  the
          first character of the value of IFS.
       ${#parameter}
          If  parameter  is * or @, the number of positional parameters is
          substituted.  Otherwise, the length of the value of the  parame-
          ter is substituted.
       ${#vname[*]}
       ${#vname[@]}
          The number of elements in the array vname is substituted.
 
       ${@vname}
          Expands  to  the    type  name  (See  Type    Variables    below) or
          attributes of the variable referred to by vname.
       ${!vname}
          Expands to the name of the variable referred to by vname.   This
          will be vname except when vname is a name reference.
       ${!vname[subscript]}
          Expands  to  name of the subscript unless subscript is *, @.  or
          of the form sub1 ..  sub2.  When subscript is  *,  the  list  of
          array subscripts for vname is generated.    For a variable that is
          not an array, the value is 0 if the variable is set.   Otherwise
          it  is  null.   When  subscript is @, same as above, except that
          when used in double quotes, each array subscript yields a  sepa-
          rate  argument.    When subscript is of the form sub1 ..  sub2 it
          expands to the list of subscripts between sub1 and  sub2    inclu-
          sive using the same quoting rules as @.
       ${!prefix*}
          Expands  to  the    names  of the variables whose names begin with
          prefix.
       ${parameter:-word}
          If parameter is set and is non-null then substitute  its    value;
          otherwise substitute word.
       ${parameter:=word}
          If  parameter  is  not  set  or is null then set it to word; the
          value of the parameter is then substituted.  Positional  parame-
          ters may not be assigned to in this way.
       ${parameter:?word}
          If  parameter  is set and is non-null then substitute its value;
          otherwise, print word and exit from the shell (if  not  interac-
          tive).  If word is omitted then a standard message is printed.
       ${parameter:+word}
          If parameter is set and is non-null then substitute word; other-
          wise substitute nothing.
       In the above, word is not evaluated unless it is to be used as the sub-
       stituted  string,  so  that,  in the following example, pwd is executed
       only if d is not set or is null:
          print ${d:-$(pwd)}
       If the colon ( : ) is omitted from  the    above  expressions,  then  the
       shell only checks whether parameter is set or not.
       ${parameter:offset:length}
       ${parameter:offset}
          Expands to the portion of the value of parameter starting at the
          character (counting from 0) determined by expanding offset as an
          arithmetic expression and consisting of the number of characters
          determined by the arithmetic expression defined by  length.   In
          the second form, the remainder of the value is used.  If A nega-
          tive offset counts backwards from the end  of  parameter.   Note
          that  one or more blanks is required in front of a minus sign to
          prevent the shell from interpreting  the    operator  as  :-.   If
          parameter is * or @, or is an array name indexed by * or @, then
          offset and length refer to the array index and  number  of  ele-
          ments  respectively.  A negative offset is taken relative to one
          greater than the highest    subscript  for    indexed  arrays.   The
          order for associate arrays is unspecified.
       ${parameter#pattern}
       ${parameter##pattern}
          If  the  shell  pattern  matches    the  beginning of the value of
          parameter, then the value of this expansion is the value of  the
          parameter  with the matched portion deleted; otherwise the value
          of this parameter is substituted.  In the first form the    small-
          est  matching  pattern  is  deleted  and    in the second form the
          largest matching pattern is deleted.  When parameter is @, *, or
          an array variable with subscript @ or *, the substring operation
          is applied to each element in turn.
 
       ${parameter%pattern}
       ${parameter%%pattern}
          If the shell pattern matches the end of the value of  parameter,
          then  the  value of this expansion is the value of the parameter
          with the matched part deleted; otherwise substitute the value of
          parameter.   In  the first form the smallest matching pattern is
          deleted and in the second form the largest matching  pattern  is
          deleted.    When parameter is @, *, or an array variable with sub-
          script @ or *, the substring operation is applied to  each  ele-
          ment in turn.
 
       ${parameter/pattern/string}
       ${parameter//pattern/string}
       ${parameter/#pattern/string}
       ${parameter/%pattern/string}
          Expands parameter and replaces the longest match of pattern with
          the given string.  Each occurrence of \n in string  is  replaced
          by  the  portion of parameter that matches the n-th sub-pattern.
          In the first form, only  the  first  occurrence  of  pattern  is
          replaced.   In  the  second  form,  each    match  for  pattern is
          replaced by the given string.  The third form restricts the pat-
          tern  match to the beginning of the string while the fourth form
          restricts the pattern match to the  end  of  the    string.   When
          string  is  null, the pattern will be deleted and the / in front
          of string may be omitted.  When parameter is @, *, or  an  array
          variable    with  subscript  @ or *, the substitution operation is
          applied to each element in turn.    In this case, the string  por-
          tion of word will be re-evaluated for each element.

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

sed -- Find pattern -- print remainder -- plus lines up to pattern -- Minus pattern

The intended result should be : PDF converters 'empty line' gpdftext and pdftotext?xml version="1.0"?> xml:space="preserve"><note-content version="0.1" xmlns:/tomboy/link" xmlns:size="http://beatniksoftware.com/tomboy/size">PDF converters gpdftext and pdftotext</note-content>... (9 Replies)
Discussion started by: Klasform
9 Replies

2. Shell Programming and Scripting

Help with parsing file with combination of pattern

I have a file1 like prt1|als28.1 prt3|als53.1 prt2|als550.1 prt1|bls9.2 prt2|als7.2 prt2|bls0.2 prt2|als872.1 prt1|bls871.1 prt2|als6.2 prt4|als22.1 prt2|bls43.2 I want to create a file2 from this file by comparing all the possible combinations of patterns (prt) assuming prt1... (3 Replies)
Discussion started by: sammy777
3 Replies

3. Shell Programming and Scripting

sed and awk usage to grep a pattern 1 and with reference to this grep a pattern 2 and pattern 3

Hi , I have a file where i have modifed certain things compared to original file . The difference of the original file and modified file is as follows. # diff mir_lex.c.modified mir_lex.c.orig 3209c3209 < if(yy_current_buffer -> yy_is_our_buffer == 0) { --- >... (5 Replies)
Discussion started by: breezevinay
5 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

Parsing and timestamp a pattern in log

Hello Thanks to Chubler_XL and MadeInGermany for their help few weeks ago. Now, i would like modifying the script, see the next POST. The old script works like that : I picked any random hours In the logs there is the stamp time of webservices, i can see the behavior or errors of... (3 Replies)
Discussion started by: amazigh42
3 Replies

6. Shell Programming and Scripting

Insert new pattern in newline after the nth occurrence of a line pattern - Bash in Ubuntu 12.04

Hi, I am getting crazy after days on looking at it: Bash in Ubuntu 12.04.1 I want to do this: pattern="system /path1/file1 file1" new_pattern=" data /path2/file2 file2" file to edit: data.db - I need to search in the file data.db for the nth occurrence of pattern - pattern must... (14 Replies)
Discussion started by: Phil3759
14 Replies

7. 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

8. Shell Programming and Scripting

Parsing of file for Report Generation (String parsing and splitting)

Hey guys, I have this file generated by me... i want to create some HTML output from it. The problem is that i am really confused about how do I go about reading the file. The file is in the following format: TID1 Name1 ATime=xx AResult=yyy AExpected=yyy BTime=xx BResult=yyy... (8 Replies)
Discussion started by: umar.shaikh
8 Replies

9. Shell Programming and Scripting

search a pattern and if pattern found insert new pattern at the begining

I am trying to do some thing like this .. In a file , if pattern found insert new pattern at the begining of the line containing the pattern. example: in a file I have this. gtrow0unit1/gctunit_crrownorth_stage5_outnet_feedthru_pin if i find feedthru_pin want to insert !! at the... (7 Replies)
Discussion started by: pitagi
7 Replies

10. Shell Programming and Scripting

Perl parsing compared to Ksh parsing

#! /usr/local/bin/perl -w $ip = "$ARGV"; $rw = "$ARGV"; $snmpg = "/usr/local/bin/snmpbulkget -v2c -Cn1 -Cn2 -Os -c $rw"; $snmpw = "/usr/local/bin/snmpwalk -Os -c $rw"; $syst=`$snmpg $ip system sysName sysObjectID`; sysDescr.0 = STRING: Cisco Internetwork Operating System Software... (1 Reply)
Discussion started by: popeye
1 Replies
Login or Register to Ask a Question