![]() |
Hello and Welcome from United States to the UNIX and Linux Forums! Thank You for Visiting and Joining Our Global Community.
|
|
google unix.com
|
|||||||
| Forums | Register | Forum Rules | Links | Albums | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here. |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| a bit tricky to change it multiple rows in one row and ... | netbanker | Shell Programming and Scripting | 2 | 01-01-2008 01:48 AM |
| Grabing Date from filename and adding to the end of each line in the file. | rkumar28 | Shell Programming and Scripting | 1 | 05-01-2007 08:25 PM |
| Change new filename with date ?? | sabercats | Shell Programming and Scripting | 9 | 02-13-2006 05:12 PM |
| Adding filename into file content | missutoomuch | Shell Programming and Scripting | 1 | 11-11-2005 04:02 PM |
| How to adding the filename into file contents | missutoomuch | Shell Programming and Scripting | 2 | 11-11-2005 05:26 AM |
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
|
|
||||
![]() Hi, I posted here before for adding up of datafile name each time, here is an example: #!/bin/bash cutdfname="data11.dbf" newname=$(echo "${cutdfname}" |tr "[A-Z]" "[a-z]" |tr "[a-z]#_@-" "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" |tr -s "x") num=$(echo $newname |cut -d"." -f1|awk -F"x" '{print $NF}') if [ -z "${num}" ] ; then num=1 newnum=$((num+1)) finaldfname=$(echo $cutdfname|sed -e "s/\./$newnum\./g") else newnum=$((num+1)) finaldfname=$(echo $cutdfname|sed -e "s/$num\./$newnum\./g") fi echo "$cutdfname -> $finaldfname" fulldfname=$lastdf/$finaldfname echo "fulldfname is $fulldfname" ./cal_file_name.bsh data11.dbf -> data12.dbf fulldfname is /data12.dbf but it failed only if datafile name like: 09 ![]() for example: #!/bin/bash cutdfname="data09.dbf" newname=$(echo "${cutdfname}" |tr "[A-Z]" "[a-z]" |tr "[a-z]#_@-" "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" |tr -s "x") num=$(echo $newname |cut -d"." -f1|awk -F"x" '{print $NF}') if [ -z "${num}" ] ; then num=1 newnum=$((num+1)) finaldfname=$(echo $cutdfname|sed -e "s/\./$newnum\./g") else newnum=$((num+1)) finaldfname=$(echo $cutdfname|sed -e "s/$num\./$newnum\./g") fi echo "$cutdfname -> $finaldfname" fulldfname=$lastdf/$finaldfname echo "fulldfname is $fulldfname" ./cal_file_name.bsh ./cal_file_name.bsh: 09: value too great for base (error token is "09") data09.dbf -> fulldfname is / can someone tune it to be perfect? Thank you and have a nice weekend! |
|
||||
|
Perderado:
Your code does not work for me. First it not gets prefix by: prefix=${main%%+([0-9])} result is the $main After that it does not take a number. Can you give some explanation how you works with ${name} It is not understandable how you have name broken on parts by that sintaxis. Thank you |
|
||||
|
Perderabo - I beleive you that your code does work, therefore I have asked about some comments: what those characters mean and how that happened?
I could not fine any reasonable explanation. I see you using regular expresion filtering and setting extglob additionaly the extended reg-expr, but I could not understand meaning of useg characters. Also it is surprizing to use a reg-expr inside of a variable name. That also is not obviose how it is works. YOu are right, after setting the extglob option it is working fine. Would you, please, give some explanation on parsing the name by different exprecion?! Thank you! |
|
||||
|
I have undestood the used syntax (with help from another person)
and replay to my question by myself. It is parameter expansion POSIX shell parameter expansions And that means: Code:
suffix=${name#*.}
So, this statement means - everything after first dot. Code:
main=${name%.$suffix}
Shorter it could be done with the same result by: Code:
main=${name##*.}
The double % and # ( %% and ## ) means to remove longer matching, instead of shorter Now the Code:
prefix=${main%%+([0-9])}
: '+' - one or more repetition; [0-9] - any digits and Code:
num=${main#$prefix}
The statement num=10#${num} adds the base of the number. Othervise the '09' would be treated as 8-base number and rase an error (9 - is out of 0-7 digits) Acctualy, last two statement before final file name construction could be done in that construction: Code:
newname=${prefix}$((10#$num+1)).${suffix}
Last edited by alex_5161; 11-05-2008 at 08:03 PM.. |
![]() |
| Bookmarks |
| Tags |
| regex, regular expressions |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|