Replace Forward Slash with sed


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Replace Forward Slash with sed
# 1  
Old 09-27-2011
Replace Forward Slash with sed

i need to replace '/' forward slash with \/(backward slash follwed by a forward slash) using sed command when the forward slash occurs as a first character in a file..

Tried something like this but doesn't seem to work.
Code:
find $1 -print0 | xargs -0 sed -i -e 's/^\//\\\//g'

Can someone help on this?


Moderator's Comments:
Mod Comment Video tutorial on how to use code tags in The UNIX and Linux Forums.

Last edited by radoulov; 09-27-2011 at 04:37 PM..
# 2  
Old 09-27-2011
Quote:
... when the forward slash occurs as a first character in a file
Assuming GNU sed (given your example usage):

Code:
sed -i '1s|^/|\/|' infile

This User Gave Thanks to radoulov For This Post:
# 3  
Old 09-28-2011
Thanks for that.. can someone tell if i could change the script to exclude the last line alone from this replace.
# 4  
Old 09-28-2011
To "exclude the last line alone", you mean change all lines except the last one?

Actually, radoulov's sed didn't work for me, strangely.

Code:
sed '$!s|^/|\\\/|' file

These 2 Users Gave Thanks to Scott For This Post:
# 5  
Old 09-28-2011
Quote:
Originally Posted by radoulov
Assuming GNU sed (given your example usage):

Code:
sed -i '1s|^/|\/|' infile

Quote:
Originally Posted by scottn
To "exclude the last line alone", you mean change all lines except the last one?

Actually, radoulov's sed didn't work for me, strangely.

Code:
sed '$!s|^/|\\\/|' file

That's because the replacement text in radoulov's solution is using an implementation-defined sequence. Since the slash is no longer the regular expression delimiter, preceding it with a backslash is undefined (as is a backslash before any non-special character).

In the replacement text of a sed substitute command:
Quote:
Originally Posted by POSIX
The meaning of a <backslash> immediately followed by any character other than '&' , <backslash>, a digit, or the delimiter character used for this command, is unspecified.
My guess is that scottn's sed treated the \/ as a / and replaced each / found with an identical /. However, since it is an implementation-defined situation, a sed implementation is free to yell at you, shake its fist at you, and refuse to process any data ... if it were so inclined. Smilie

The \\\/ in scottn's solution exhibits the same shortcoming as radoulov's: an undefined \/ sequence. \\\/ may yield the desired result with some sed implementations, but it is still depending on unspecified behavior.

A portable solution could use s|^/|\\/| or (the uglier, less readable) s/^\//\\\//.

Regards,
Alister

Last edited by alister; 09-28-2011 at 01:40 PM..
These 2 Users Gave Thanks to alister For This Post:
# 6  
Old 09-28-2011
It replaces last line also

line is like this

Code:
end;
/

I dont want the last forward slash to be replaced
# 7  
Old 09-28-2011
Ah, OK. I got it!

When radoulov's solution didn't work, I did the first thing I almost always do: Switch to different quotes - to double quotes in this case.

When it still didn't work, I did what I usually do second: Threw another slash at it (now we have sed "s|/|\\/"), which still didn't work. So I threw another slash at it(!) and bingo!

The difference was between ' and ".
Code:
$ sed "s|^/|\\/|" file1
/3file
/3fileX
/file1
/tmp/A/a
/tmp/A/a/1.txt
/tmp/A/A.tar
$ sed 's|^/|\\/|' file1
\/3file
\/3fileX
\/file1
\/tmp/A/a
\/tmp/A/a/1.txt
\/tmp/A/A.tar

 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Replace string until 3Rd occurance of forward slash(/)

I have a file abc.txt which has records like 456 /home/fgg/abdc.txt 3567 /home/fdss/vfgb.txt 23 /home/asd/dfght.txt I WANT TO REMOVE STRING UNTIL 3RD OCCURANCE OF FORWARD SLASH Output should be like abdc.txt vfgb.txt dfght.txt (5 Replies)
Discussion started by: himanshupant
5 Replies

2. Shell Programming and Scripting

Escaping Forward Slash

./split2.sh: line 1: split/ssl/pop3s.txt: No such file or directory sort: cannot read: split/ssl/pop3s.txt: No such file or directory Hi there, I am pulling data from the following source: ssl/http ssl/http ssl/http-alt ssl/https ssl/https ssl/https ssl/https ssl/https ssl/https... (3 Replies)
Discussion started by: alvinoo
3 Replies

3. Shell Programming and Scripting

sed command to replace slash in date format only

Hello experts. I haven't been able to find a solution for this using the sed command. I only want to replace the forward slash with string "FW_SLASH" only if there's a number right after the slash while preserving the original number. I have a file containing 2 entries: Original File:... (5 Replies)
Discussion started by: pchang
5 Replies

4. Shell Programming and Scripting

AWK or SED to replace forward slash

hi hope somebody can help, there seems to be bit on the net about this, but still cant make it work the way i need. i have a file live this mm dd ff /dev/name1 mm dd ff /dev/name2 mm dd ff /dev/name3 mm dd ff /dev/name4 i need to update /dev/name1 etc to /newdev/new/name1 etc so... (5 Replies)
Discussion started by: dshakey
5 Replies

5. Shell Programming and Scripting

Significance of forward slash(/) while specifying a directory

What is the significance of the forward slash(/) while specifying a directory? cp -av /dir/ /opt/ and cp -av /dir /opt Does effectively the same job it seems? (2 Replies)
Discussion started by: proactiveaditya
2 Replies

6. Shell Programming and Scripting

How to replace comma by slash using sed in an UTF8 file

Hello all, I'd like to replace "," by "/" in a utf8 file from postion X to Y. Comma "," is also defined as delimiter. 12345678901234567890,123456789012345,12345678901234567890, aaaa,aaaa,aaaaa ,bbb,bbbb,bbbbb ,cccccc,cc , Result should be... (1 Reply)
Discussion started by: fmofmo
1 Replies

7. Shell Programming and Scripting

Using sed to append backward slash before forward slash

Hi all, I need to know way of inserting backward slash before forward slash. My problem is that i need to supply directory path as an argument while invoking cshell script. This argument is further used in script (i.e. sed is used to insert this path in some file). So i need to place \ in front... (2 Replies)
Discussion started by: sarbjit
2 Replies

8. Shell Programming and Scripting

escaping / (forward slash)

how to escape / (forward slash) in a string. I have following scnerio: sed s/${var1}{$var2} var1 and var2 both contain slashes, but sed gives error if there is a slash in var1 or var2. sed is used here to replace var1 with var2. Thanks in advance (1 Reply)
Discussion started by: farooqpervaiz
1 Replies

9. Shell Programming and Scripting

Help with SED and forward slash

Using the script: (Called replaceit) #!/bin/ksh String=$1 Replace=$2 sed -e "s/${orig}/${new}/g" oldfile.txt > newfile.txt In oldfile.txt, I'm looking for: getenv("Work") And change it To: /u/web I execute the script: replaceit "getenv(\""Work\"")" /u/web I'm getting sed... (3 Replies)
Discussion started by: gseyforth
3 Replies

10. Shell Programming and Scripting

grep for forward slash

How can I use grep to grab a line that contains a forward slash? I've tried: grep "/pd " file, Inevitably it just grabs pd not /pd. (3 Replies)
Discussion started by: wxornot
3 Replies
Login or Register to Ask a Question