How to handle variable with special character?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to handle variable with special character?
# 8  
Old 11-22-2018
Pseudocode which doesn't do what you want really doesn't tell us what you do want. What is $1 here? And what is 'grep $1' for? It's not going to do anything where you've put it.

Also, I noted above that [ -f * ] is a bad idea since it will fail with syntax errors whenever you match more than one file.

Also, you're still not quoting any of your variables and really should be.
# 9  
Old 11-23-2018
Quote:
Originally Posted by Corona688
Pseudocode which doesn't do what you want really doesn't tell us what you do want. What is $1 here? And what is 'grep $1' for? It's not going to do anything where you've put it.

Also, I noted above that [ -f * ] is a bad idea since it will fail with syntax errors whenever you match more than one file.

Also, you're still not quoting any of your variables and really should be.


thanks Corona688 for the explanation.
my bad, I didn't explain it clearly.
the requests is pass a value (eg: v$abc) when calling the script, get file directory and file name from master file. (below is sample master file), then go to corresponding directory, rename file (may need split the file as well). below pseudocode is testing code to check I can use variable with "$" sign. yes, there may have more than one files matching. could you please advise the best way to handle multiple matches. thanks in advance


Code:
 sample master
directory, filename
abc, v$abc_nau
abc, v$eee_bxy
cde, v$abc_nau



Code:
 #!/bin/ksh
while read filename
do
if [ -f ${filename}* ]; then
mv ${1}* ${1}_newname
fi
done<masterfile|grep ${1}


command to call the script:
Code:
 ksh scriptname 'v$abc'

# 10  
Old 11-23-2018
Quote:
Originally Posted by green_k
thanks Corona688 for the explanation.
the requests is pass a value (eg: v$abc) when calling the script, get file directory and file name from master file.
OK.
Quote:
then go to corresponding directory, rename file (may need split the file as well).
May? What decides that?

Quote:
below pseudocode is testing code to check I can use variable with "$" sign.
That is gibberish.
Quote:
yes, there may have more than one files matching. could you please advise the best way to handle multiple matches.
I already showed you one way, if you don't like it, perhaps you need to tell me what you're expecting to happen.

And your code still has that grep on the end which will do exactly nothing where you've put it and I don't know what you're expecting it to do if you put it anywhere else. What is it for?

command to call the script:
Code:
 ksh scriptname 'v$abc'

OK, questions remaining:
  • "variable with $" -- We already told you v$abc is not a variable, so what do you mean now?
  • Splitting the file -- when do you want this to happen, why, how?
  • Multiple matches -- what do you top expect to happen, why, how?
  • What, exactly, are you hoping that grep will do?
# 11  
Old 11-23-2018
I think I finally get it -- that grep is supposed to find the line in the file you want. What for, I'm not certain, as you don't use the file for anything, yet. So I'm also wild-guessing that the 'dir' part of the file ends up being part of the destination file name.

Please try this code and see if it does anything like what you want. It won't actually move any files, just print 'mv inputfile outputfile'.
Code:
#!/bin/ksh

# We use a function, so overwriting $1 $2 ... won't affect anything outside
function checkfile {
        dir="$1"
        set -- "${2}"* # Match one or more files, placing in local $1 $2 ...
        if [ ! -f "${1}" ]
        then
                echo "${1} not found" >&2
                return 1
        fi

        echo mv "${1}" "${1}_${dir}"
}

while IFS=", " read dir filename # Split input upon spaces and commas
do
        # Skip lines where filename doesn't match the argument given.
        [ "$1" = "$filename" ] || continue
        # call checkfile.  Inside checkfile, $1=$dir and $2=$filename
        checkfile "$dir" "$filename"
done<masterfile


Last edited by Corona688; 11-23-2018 at 11:49 AM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Special character $$

Hi, on ksh What does the following do? grep -v "toolbox" $home_oracle/.profile >$home_oracle/.profile.$$ Thanks. Please use CODE tags as required by forum rules! (3 Replies)
Discussion started by: big123456
3 Replies

2. Shell Programming and Scripting

Handle special characters in awk -F

Hello Folks, Need to bisect strings based on a subset. Below works good. echo /a/b/c/d | awk -F"/c/d$" '{print $1}' /a/b However, it goes awry with special characters. echo /a/b/c+/d | awk -F"/c+/d$" '{print $1}' /a/b/c+/d Desired output: /a/b Escaping the special characters... (11 Replies)
Discussion started by: vibhor_agarwali
11 Replies

3. Shell Programming and Scripting

Vi special character

When editing a file, vi displays a special character as ^L. Can you tell me the escaped character to be used in awk? And can that escaped character be used in a regexp in both sed and awk? (7 Replies)
Discussion started by: dmesserly
7 Replies

4. Shell Programming and Scripting

How to substitute variable in sed for special character?

Hi , I have input file like below Hi this is "vinoth". Hi happy to work with 'unix' USA(united states of America) My script variables are below : Dquote=Ộ Squote=&#$567 Obrac=&^986 Cbrac=&^745 I want to read the variables in my SED command to replace the double quote,single... (9 Replies)
Discussion started by: vinothsekark
9 Replies

5. Shell Programming and Scripting

How to handle variable with spaces in ksh

I'm having issue capturing a value from file.list with a multiple spaces in a variable $i, tried various options like using double quotes, no quotes, single quotes, curly braces but to no avail. cat file.list aaa test bbb ccc test ddd eee test fff for i in `cat file.list` do echo "$i";... (2 Replies)
Discussion started by: mbak
2 Replies

6. Shell Programming and Scripting

Deleteing one character after an special character

I have below line in a unix file, I want to delete one character after "Â". 20091020.Non-Agency CMO Daily Trade Recap Â~V Hybrids The result should be : 20091020.Non-Agency CMO Daily Trade Recap  Hybrids i dont want to use "~V" anywhere in the sed command or any other command, just remove... (1 Reply)
Discussion started by: mohsin.quazi
1 Replies

7. Shell Programming and Scripting

Special character \

Hi, In the shell script, i need to remove the special charater "\" with "\\". For example, i need to replace "D:\FXT\ABC.TXT" with "D:\\FXT\\ABC.TXT". However, when trying to do something like , i get the below error :- -->echo "D:\FXT\ABC.TXT" | sed -e 's#\#\\#g' sed: 0602-404 Function... (7 Replies)
Discussion started by: amit_arora
7 Replies

8. Shell Programming and Scripting

special character

Hi, I am trying to unload file from a database. Which contains few lines with the character below. Rest of the data was unloaded appropriately. a) What does this below character means? b) How can i remove it, I already have sed '/^$/d' c) Will this effect the file by any means... (4 Replies)
Discussion started by: tostay2003
4 Replies

9. Shell Programming and Scripting

How ro handle backslash character in grep?

Hi , I am doing invert grep using -v but the string contain "/" which break the grep command and it do not skip the lines with "/" on it. Diffu.txt ======== 1159c1159 < <td align="right" valign="middle" class="paddingRight2px" id="featureListItemChannelButton7466"> --- > <td... (1 Reply)
Discussion started by: rajbal
1 Replies

10. Programming

special character ?

hey there im a bit stuck on executing commands that include the special character '?'. can someone recommend a way on how i would be able to execute it?? i thought the glob function could be useful (still mite be) but upon entering the command 'ls pars?' it listed all the files in the... (1 Reply)
Discussion started by: mile1982
1 Replies
Login or Register to Ask a Question