Function to add escape character before specified character


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Function to add escape character before specified character
# 1  
Old 12-30-2013
Function to add escape character before specified character

Hi ,

I am looking for a function which will do the following.

1. I have a variable which will hold few special chracter like
Code:
SPECIAL_CHARS="& ;"

2. I have an escape character.
Code:
ESCAPE_CHAR="\"

3. Now when I passed some string in the function it will return the same string but now it will have the escape character before all the special characters.
Code:
Example:
Input: abcd fkaj&dsdsd
Output: abcd fkaj\&dsdsd

# 2  
Old 12-30-2013
Code:
# echo "abcd fkaj&dsdsd" | ruby -e 's=gets; puts s.gsub(/([& ;])\1*/,"\\\\\\1")'
abcd\ fkaj\&dsdsd

This User Gave Thanks to kurumi For This Post:
# 3  
Old 12-30-2013
Python re module maybe handy for that task:
Code:
echo "abcd fkaj&dsdsd;"|python -c 'import re;import sys;print re.escape(sys.stdin.read().strip()),'

This User Gave Thanks to Klashxx For This Post:
# 4  
Old 12-30-2013
Awk :
Code:
$ echo "abcd fkaj&dsdsd" | awk 'gsub(/[[:punct:]]|[[:space:]]/,"\\\\&")'
abcd\ fkaj\&dsdsd


Last edited by Akshay Hegde; 12-30-2013 at 08:59 AM.. Reason: backslash
This User Gave Thanks to Akshay Hegde For This Post:
# 5  
Old 12-30-2013
Another approach:
Code:
SPECIAL_CHARS='& ;'
ESCAPE_CHAR='\'
echo 'abcd fkaj&dsdsd' | awk -v SC="$SPECIAL_CHARS" -v EC="$ESCAPE_CHAR" '
        BEGIN {
                n = split ( SC, A )
        }
        {
                for ( i = 1; i <= n; i++ )
                        gsub ( A[i], EC "\\&", $0 )
                print
        }
'

This User Gave Thanks to Yoda For This Post:
# 6  
Old 12-30-2013
Try also
Code:
awk -v X="& ;" -v E='\' '{gsub(/./,"&|",X); sub (/.$/,"", X); gsub (X, "\\" E "&")}1' <<< 'abcd fkaj&dsdsd'
abcd\ fkaj\&dsdsd

If you know the escape char is back slash, this may work:
Code:
awk -v X="& ;" -v E='\' '{gsub(/./,"&|",X); sub (/.$/,"", X); gsub (X, E E "&")}1' <<< 'abcd fkaj&dsdsd'
abcd\ fkaj\&dsdsd

Yoda's approach misses the space special char as that is used as a separator by the split function.

EDIT: Even simpler:
Code:
awk -v X="& ;" -v E='\' '{ gsub ("["X"]", E E "&")}1' <<< 'abcd fkaj&dsdsd'
abcd\ fkaj\&dsdsd


Last edited by RudiC; 12-30-2013 at 02:40 PM..
This User Gave Thanks to RudiC For This Post:
# 7  
Old 12-30-2013
Quote:
Originally Posted by RudiC
Yoda's approach misses the space special char as that is used as a separator by the split function.
I don't think OP want blank space to be escaped. I don't see blank space escaped in OP's expected output.

I guess OP want to escape only those characters defined in variable SPECIAL_CHARS
This User Gave Thanks to Yoda For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Escape special character

Hi, How to use * in call to pl/sql block from shell script? The line "select * from" is causing all files and directiores to show up in email notification but if I give all column names then it works, Please let me know how to use '*' instead of giving all column names, in other wirds how to... (2 Replies)
Discussion started by: sandy162
2 Replies

2. Shell Programming and Scripting

sed - with escape character

i have string as below str=".<date>" in which i need to replace < with /< , when i tried with sed , got the output. --> echo $str | sed 's/</\\</g' .\<date> when i tried to assign it to a variable , i am not getting the same --> a=`echo $str | sed 's/</\\</g'` ; echo $a... (4 Replies)
Discussion started by: expert
4 Replies

3. Shell Programming and Scripting

Problem with using a sed to add escape character \ before $ and ' symbols

Hi all, I've got a problem with sed. Want to use it to add escape character \ before $ and ' symbols so condition='1'$some will become condition=\'1\'\$some echo "condition='1'$some" | sed 's/\($\)/\\\1/g' is not working properly. Can somebody help me with this please? Regards,... (7 Replies)
Discussion started by: johny_be_good
7 Replies

4. UNIX for Advanced & Expert Users

if 4th and 5th character of sting -ge 45 then add 1 to 3rd character

I want to know how to, given a string like W87151WR71C, if the 4th and 5th character (in this case 15) are greater than 45, then to add 1 to the 3rd character (in this case 7) and assign the revised string the variable name MODSTRING. Thanks in advance. This is ultimately to grab info from... (6 Replies)
Discussion started by: glev2005
6 Replies

5. Shell Programming and Scripting

Escape character in sed

Hello experts I am trying to write a shell script which will add ' ' to a unix variable and then pass it to oracle for inserting to a table. I am running the script as root and I have to do a su -c . The problem is the character ' is not recognised inside sed even after adding escape... (1 Reply)
Discussion started by: pvedaa
1 Replies

6. Shell Programming and Scripting

escape character in tcsh

Hello, I wanted to display command with echo like this in tcsh. output should be "//'test.test1.test2'" (" at both ends also required in output) Please help me. (1 Reply)
Discussion started by: balareddy
1 Replies

7. Shell Programming and Scripting

Escape character

Hi , I want to change space to ' in my script. I tried doing this, sed 's/ /\'/g' filename but i could not get it. can some one help me please. Thanks, Deepak (4 Replies)
Discussion started by: deepakpv
4 Replies

8. Shell Programming and Scripting

awk / escape character

Hi I'm trying to split a dir listing eg /home/foo1/foo2 I'm using ksh I've tried dir=/home/foo1/foo2 splitit=`echo $dir | awk -F '\/' '{print $1}'` echo $splitit nothing is output! I have checked the escape character. The only one I have found is \ BTW `pwd` | awk -F \/... (8 Replies)
Discussion started by: OFFSIHR
8 Replies

9. Shell Programming and Scripting

Escape character in vi?

I want to replace a string which contains "/" in vi but what is the escape character for forward slash? e.g. I have a text file with the contents below and I want to replace "/Top/Sub/Sub1" with "ABC". /Top/Sub/Sub1 The replace command I am using is ... (4 Replies)
Discussion started by: stevefox
4 Replies

10. UNIX for Dummies Questions & Answers

possible to escape the \ character in sed?

is it possible to escape the \ character in sed? right now I'm trying to replace all occurances of \ with \\ sed \"s|test|test_replacement|g\" file1 > output; #this works fine sed \"s|\\|\\\|g\" file1 > output; #this generates the following error: sed: -e expression #1, char 17:... (1 Reply)
Discussion started by: gammaman
1 Replies
Login or Register to Ask a Question

Featured Tech Videos