sed - replacement file path with variable - Escaping / character


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting sed - replacement file path with variable - Escaping / character
# 1  
Old 07-14-2014
sed - replacement file path with variable - Escaping / character

Hi,,
I have the line below in a file:
Code:
$!VarSet |LFDSFN1| = '"E:\APC\Trials\20140705_427_Prototype Trial\Data\T4_20140705_Trial_Cycle_Data_13_T_Norm.txt" "VERSION=100 FILEEXT=\"*.txt\" FILEDESC=\"General Text\" "+""+"TITLE{SEARCH=NONE  NAME=\"New Dataset\" LINE=1

I want to write a script to change it to:
Code:
$!VarSet |LFDSFN1| =  '"T4_20140705_Trial_Cycle_Data_13_T_Norm.txt" "VERSION=100  FILEEXT=\"*.txt\" FILEDESC=\"General Text\" "+""+"TITLE{SEARCH=NONE   NAME=\"New Dataset\" LINE=1

i.e remove the section of the file path.
E:\APC\Trials\20140705_427_Prototype Trial\Data\

The file path and the file names are varibels defined by
Code:
DATA_FILE_NAME=$(awk -F'"' -v VAR="$FILE" 'NR==4 {print $2}' $FILE)

giving me : E:\APC\Trials\20140705_427_Prototype Trial\Data\T4_20140705_Trial_Cycle_Data_13_T_Norm.txt

Code:
DATA_FILE_NAME_NO_PWD=$(echo $DATA_FILE_NAME | awk -F'\' '{print $NF}')

giving me: T4_20140705_Trial_Cycle_Data_13_T_Norm.txt

I wanted to use SED to replace $DATA_FILE_NAME with the $DATA_FILE_NAME_NO_PWD, however I can't get it to work. I know its due to the / in the variable $DATA_FILE_NAME however i can't work out how to escape this character. I've tried as many ways as i can find, but still can't get it to work.

How do i get this to work, what have i missed?


Code:
sed -i "s|$DATA_FILE_NAME|$DATA_FILE_NAME_NO_PWD|" "$FILE"


Last edited by carlr; 07-14-2014 at 04:24 PM.. Reason: Add and fix CODE tags.
# 2  
Old 07-15-2014
Either replace the backslashes with something the shell/sed isn't going to try and interpret, or escape them with backslashes, e.g.
Code:
DATA_FILE_NAME=$(awk -F'"' '{print $2}' $FILE | sed 's|\\|\\\\|g')

# 3  
Old 07-15-2014
Assuming that I understand correctly what you're trying to do (i.e., delete the directory portion of the pathname in the first double quoted string on the 4th line of a file), this seems to be an easy way to do it:
Code:
sed  -i '4s/"[^"]*\\/"/' "$FILE"

This will not, however, work correctly if there is no directory given in that first double quoted string.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

How to use sed to insert character in the beginning of file path?

I need to manipulate one Database file on Solaris 11 in which contains more than 5000 lines of data file path like this: '/data1/oradata/DBNAME/system01.dbf', '/data7/oradata/DBNAME/undotbs1_01.dbf', '/data1/oradata/DBNAME/sysaux01.dbf', '/data28/oradata/DBNAME/userdata01.dbf', ... (6 Replies)
Discussion started by: duke0001
6 Replies

2. Shell Programming and Scripting

Sed:- Supported variable replacement after string match?

Hi All, I am trying to replace the variable in the file after the particular match string. It is being replaced if i hardcode the value and with use of "&" with sed. sed -e "s/URL./& http:\\localhost:7223/g" But when am trying to pass the variable it is failing. I tried multiple... (9 Replies)
Discussion started by: sharsour
9 Replies

3. Shell Programming and Scripting

sed replacement in file when line is in a variable

Hi, I have a file where I want to replace the 15th field separated by comma, only on specific lines matching lots of different conditions. I have managed to read the file line by line, within the loop my line is held in a variable called $line I assume this will be using sed (maybe... (5 Replies)
Discussion started by: jpt123
5 Replies

4. Shell Programming and Scripting

escaping path

Hi I use : path=/var/www/admin echo "$path" | sed -e 's/\//\\\//g' this return \/var\/www\/admin and is ok. but path2=`echo "$path" | sed -e 's/\//\\\//g'` echo $path2 return an error: sed: -e expression #1, char 9: unknown option to `s' Can anyone help me? Thanks (3 Replies)
Discussion started by: georgian
3 Replies

5. Shell Programming and Scripting

Path a variable to sed that includes a path

Hi I'm trying to select text between two lines, I'm using sed to to this, but I need to pass variables to it. For example start="BEGIN /home/mavkoup/data" end="END" sed -n -e '/${start}/,/${end}/g' doesn't work. I've tried double quotes as well. I think there's a problem with the / in the... (4 Replies)
Discussion started by: mavkoup
4 Replies

6. Shell Programming and Scripting

setting variable value to dynamic sed match - escaping hell

Hello All, I'm trying to write a script that will perform a dynamic match (of a dynamic variable) and set a variable to have the resulting (match) value. The idea is that the environment variable to check ($1) and the regular expression to use ($2) are given as parameters. For example,... (5 Replies)
Discussion started by: aedgar
5 Replies

7. Shell Programming and Scripting

Escaping specific character in awk

Hello there, I have a bit of dirty delimited file, I mentioned dirty because, the delimiter can also appear in wrong positions. However, one uniqueness of this file is whenever the delimiter appear inside the double quote, then do not consider as delimiter, if it appear outside double then... (8 Replies)
Discussion started by: brainyoung
8 Replies

8. Shell Programming and Scripting

Sed variable substitution when variable constructed of a directory path

Hello, i have another sed question.. I'm trying to do variable substition with sed and i'm running into a problem. my var1 is a string constructed like this: filename1 filerev1 filepath1 my var2 is another string constructed like this: filename2 filerev2 filepath2 when i do... (2 Replies)
Discussion started by: alrinno
2 Replies

9. Shell Programming and Scripting

Sed-Special character replacement

Hi I want to replace ./testsed.ksh with testsed.ksh ./ is to be removed scriptnm=`sed -e 's/\.///' $0 does not work Please help (3 Replies)
Discussion started by: usshell
3 Replies

10. Shell Programming and Scripting

Escaping the * character in ksh.

Hi All, In ksh script i'm trying to assign "sqlstmt1" varaible value, update VAREntryTb set VAR10num = VAR1num * Mltplr where BusD = '$val1' and RunI = 1"` Hence i wrote below statement, the issue with this is shell is expanding "*" character adn thus subistuting it with the content of my... (6 Replies)
Discussion started by: arvindcgi
6 Replies
Login or Register to Ask a Question