Ok when people will stop posting html converted perhaps we will try to read 
their demand.



On 11/01/2010 02:58 PM, catkins wrote:
> Here's a bash-with-embedded awk scrippet that parses Bacula .conf files.  I 
> don't know if it works with all possible permutations of .conf file layout 
> (it's only tested on my own).  It uses supporting functions ck_file, finalise 
> and msg but they only do the obvious and are not significant in the parsing.
> 
> #--------------------------
> # Name: parse_conf_file
> # Purpose: parses a conf file
> #   * The conf file may be one of Bacula's or our own
> # Usage:  
> #   $1: name of file to parse
> # Global variables set:
> #   keyword_orgs[]  Keywords as they appear in the 
> conf file
> #   keywords[]  Keywords after canonicalisation.  
> "Keyword" incudes any { or }.
> #   conf_value*[]  Any values following a keyword 
> (* is replaced by 0,1,2 ...)
> #   conf_n_values[]  Number of conf_value*[] 
> arrays populated for each line
> #   n_functional_lines  Number of lines containing a keyword
> #--------------------------
> function parse_conf_file {
> 
>     local conf_afn
> 
>     conf_afn=$1
> 
>     # Does the file exist?
>     # ~~~~~~~~~~~~~~~~~~~~
>     buf="$( ck_file $conf_afn:fr 2>&1 )"
>     if [[ $buf != '' ]]
>     then
>         msg E "Terminating on configuration file 
> problem:$lf$buf"
>         finalise 1
>     fi
> 
>     eval "$( $awk '
>         BEGIN {
>             squote = "\047"
>             n_functional_lines=0
>         }
> 
>         {
>             # Strip any comment and any 
> spaces+tabs before it
>             # 
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>             # This is not so easy because a # 
> within a
>             # quoted string does not introduce 
> a comment and
>             # an escaped " (that is \") 
> does not terminate a
>             # quoted string.
>             in_string = 0      
>                       
>        # False
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for &#40; i = 1; i <= length&#40; 
> $0 &#41;; i++ &#41;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#123;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; char = substr&#40; 
> $0, i, 1 &#41;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if &#40; char == "#" 
> && in_string == 0 &#41;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#123;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $0 = 
> substr&#40; $0, 1, i - 1 &#41;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
> sub&#40; /&#91; \t&#93;*$/, "", $0 &#41;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#125;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if &#40; char == 
> "\"" &#41;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#123;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if 
> &#40; in_string == 0 &#41; in_string = 1
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else if 
> &#40; substr&#40; $0, i - 1, 1 &#41; != "\\" &#41; in_string = 0
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#125;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#125;
> 
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Get keyword and value&#40;s&#41; 
> string
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; split&#40; $0, array, /&#91; 
> \t&#93;*=&#91; \t&#93;*/ &#41;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; keyword_org = array&#91;1&#93;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sub&#40; /^&#91; \t&#93;*/, "", 
> keyword_org &#41;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# 
> Remove any leading spaces and tabs
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if &#40; keyword_org == "" &#41; 
> next&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# 
> Functionally empty line so discard
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print "keyword_orgs&#91;" 
> n_functional_lines "&#93;=" squote keyword_org squote
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; keyword = tolower&#40; keyword_org 
> &#41;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gsub&#40; /&#91; \t&#93;*/, "", 
> keyword &#41;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
> &nbsp;# Remove any spaces and tabs from keyword
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print "keywords&#91;" 
> n_functional_lines "&#93;=" squote keyword squote
> 
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Get individual values from 
> value&#40;s&#41; string
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; n_values=0
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; values_string = array&#91;2&#93;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while &#40; length&#40; 
> values_string &#41; > 0 &#41;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#123;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; value = ""
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if &#40; substr&#40; 
> values_string, 1, 1 &#41; == "\"" &#41;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#123;&nbsp; &nbsp; 
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# Value is a 
> quoted string
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; buf = 
> substr&#40; values_string, 2, match&#40; values_string, /&#91;^\\&#93;"/ 
> &#41; - 1 &#41;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Strip 
> quoted string just taken
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
> values_string = substr&#40; values_string, length&#40; buf &#41; + 3 &#41;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Copy 
> to value, processing any escapes
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for 
> &#40; i = 1; i <= length&#40; buf &#41;; i++ &#41;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#123;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
> &nbsp; char = substr&#40; buf, i, 1 &#41;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
> &nbsp; if &#40; char != "\\" &#41; value = value char
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
> &nbsp; else
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
> &nbsp; &#123;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# Backslash 
> escape
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
> &nbsp; &nbsp; &nbsp; if &#40; substr&#40; buf, i + 1, 1 &#41; == "\\" &#41;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
> &nbsp; &nbsp; &nbsp; &#123;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# Escaped \ so 
> keep one
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; value = value "\\"
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i++
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
> &nbsp; &nbsp; &nbsp; &#125;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
> &nbsp; &#125;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#125;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#125;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#123;&nbsp; &nbsp; 
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# Value is 
> unquoted
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; value = 
> values_string
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
> sub&#40; /&#91; \t&#93;.*$/, "", value &#41;&nbsp; &nbsp; &nbsp; &nbsp; 
> &nbsp; &nbsp; # Strip anything after space or tab
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Strip 
> value string just taken
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
> values_string = substr&#40; values_string, length&#40; value &#41; + 1 &#41;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#125;
> 
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print "conf_value" 
> n_values++ "&#91;" n_functional_lines "&#93;=" squote value squote
> 
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Clean up for the 
> next loop pass
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sub&#40; /^&#91; 
> \t&#93;*/, "", values_string &#41;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# Strip 
> leading spaces and tabs
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#125;
> 
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print "conf_n_values&#91;" 
> n_functional_lines "&#93;=" squote n_values squote
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; n_functional_lines++
> &nbsp; &nbsp; &nbsp; &nbsp; &#125;
> 
> &nbsp; &nbsp; &nbsp; &nbsp; END &#123;
> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print "n_functional_lines=" squote 
> n_functional_lines squote
> &nbsp; &nbsp; &nbsp; &nbsp; &#125;' "$conf_afn" \
> &nbsp; &nbsp; &#41;"
> 
> &#125;&nbsp; # end of function parse_conf_file
> 
> 
> +----------------------------------------------------------------------
> |This was sent by catki...@yahoo.co.uk via Backup Central.
> |Forward SPAM to ab...@backupcentral.com.
> +----------------------------------------------------------------------
> 
> 
> 
> ------------------------------------------------------------------------------
> Nokia and AT&T present the 2010 Calling All Innovators-North America contest
> Create new apps & games for the Nokia N8 for consumers in  U.S. and Canada
> $10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketing
> Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store 
> http://p.sf.net/sfu/nokia-dev2dev
> _______________________________________________
> Bacula-users mailing list
> Bacula-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/bacula-users


-- 

Bruno Friedmann (irc:tigerfoot)
Ioda-Net Sàrl www.ioda-net.ch
 openSUSE Member
    User www.ioda.net/r/osu
    Blog www.ioda.net/r/blog
  fsfe fellowship www.fsfe.org
GPG KEY : D5C9B751C4653227
vcard : http://it.ioda-net.ch/ioda-net.vcf

------------------------------------------------------------------------------
Nokia and AT&T present the 2010 Calling All Innovators-North America contest
Create new apps & games for the Nokia N8 for consumers in  U.S. and Canada
$10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketing
Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store 
http://p.sf.net/sfu/nokia-dev2dev
_______________________________________________
Bacula-users mailing list
Bacula-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bacula-users

Reply via email to