Go Back   The UNIX and Linux Forums > Top Forums > UNIX for Dummies Questions & Answers
Search Forums:



UNIX for Dummies Questions & Answers If you're not sure where to post a UNIX or Linux question, post it here. All UNIX and Linux newbies welcome !!

Reply    
 
Thread Tools Search this Thread Display Modes
    #1  
Old 02-07-2012
Registered User
 

Join Date: May 2011
Posts: 45
Thanks: 8
Thanked 0 Times in 0 Posts
Vi/sed placing an "r" when I ask for "\r"

I'm using SunOS 5.9 and the version of vi on this machine has several differences, compared to other machines I use, that don't produce the desired result. For example, if I open a text file in vi and then enter the following in command mode:

Code:
%s/ /\r/g

I'm expecting vi to replace all spaces with a carriage return. Instead, it replaces all spaces with an "r". I've tried using \r\n, \n, \n\r and I still get the same result. This seems to be prevalent on all Solaris/SunOS hosts I use.

How do I determine the version of vi I am using? --version is not an option. When I determine the version how can I make the edits from within vi as described?
Sponsored Links
    #2  
Old 02-08-2012
Registered User
 

Join Date: Jan 2009
Location: Pune ,India
Posts: 131
Thanks: 12
Thanked 22 Times in 22 Posts
try
%s/ /\\r/g
The Following User Says Thank You to kalpeer For This Useful Post:
MaindotC (02-08-2012)
Sponsored Links
    #3  
Old 02-08-2012
Scrutinizer's Avatar
mother ate her
 

Join Date: Nov 2008
Location: Amsterdam
Posts: 5,382
Thanks: 82
Thanked 1,115 Times in 1,019 Posts
Have you tried using /usr/xpg4/bin/vi instead?
The Following User Says Thank You to Scrutinizer For This Useful Post:
MaindotC (02-08-2012)
    #4  
Old 02-08-2012
gary_w's Avatar
Registered User
 

Join Date: Oct 2010
Posts: 303
Thanks: 24
Thanked 67 Times in 62 Posts
The action you describe is what I would have expected actually. You need to enter a control character so press CTRL-V which allows entry of a control character, then press enter like this:


Code:
:%s/ /<CTRL-V><Enter>/g

Note when you press CTRL-V you will see a circumflex appear to indicate its waiting for the control character. When you press Enter you will see it change to ^M (which is actually 1 character, a control character). Try it, you'll see.

I'm on Sun 5.8 by the way.

Last edited by gary_w; 02-08-2012 at 10:28 AM..
The Following User Says Thank You to gary_w For This Useful Post:
MaindotC (02-08-2012)
Sponsored Links
    #5  
Old 02-08-2012
Registered User
 

Join Date: May 2011
Posts: 45
Thanks: 8
Thanked 0 Times in 0 Posts
Quote:
Originally Posted by kalpeer View Post
try
%s/ /\\r/g
Nope - replaces all spaces with \\r

Quote:
Originally Posted by Scrutinizer View Post
Have you tried using /usr/xpg4/bin/vi instead?
I did try this just now and thankfully I do have access to this editor but I was unable to achieve the desired result. If there's something I would try other than the sed commands I or kalpeer listed I'm not aware of it but I'll research further the differences between your suggestion and the usual vi I use.

Quote:
Originally Posted by gary_w View Post
The action you describe is what I would have expected actually. You need to enter a control character so press CTRL-V which allows entry of a control character, then press enter like this:


Code:
:%s/ /<CTRL-V><Enter>/g

Note when you press CTRL-V you will see a circumflex appear to indicate its waiting for the control character. When you press Enter you will see it change to ^M (which is actually 1 character, a control character). Try it, you'll see.

I'm on Sun 5.8 by the way.
This did work for me! How rude of vi! I'll try out other control characters - thank you all for your help.
Sponsored Links
    #6  
Old 02-08-2012
gary_w's Avatar
Registered User
 

Join Date: Oct 2010
Posts: 303
Thanks: 24
Thanked 67 Times in 62 Posts
Nothing rude about it! lol. That's how UNIX is designed to work. You need a way to tell vi to ignore the following key sequence as command, and read it as the character itself instead. The designers chose the CTRL-V sequence to do this, that's all.

Here's a table that shows control characters for various keys like TAB and ESC, etc that may come in handy: ASCII Table - table of ASCII codes.

You can enter control characters in the same way too. See what happens when you type this:

Code:
$ echo "Hello<CTRL-V><TAB><CTRL-V><TAB>world"

Sponsored Links
    #7  
Old 02-16-2012
Registered User
 

Join Date: May 2011
Posts: 45
Thanks: 8
Thanked 0 Times in 0 Posts
I have one other problem - the nbsp character (\255)...I realise to enter ctrl character mode I press CTRL + V, but what do I enter to represent the nbsp? I googled and can't find where it relates to the keyboard.

Edit - actually I found out 255 is not nbsp - or at least my editor is returning ctrl + shift + space as \240.

Edit2 - ok now I see that \255 is a type of hyphen...how do I remove them all other than going to the \255 and using the x command to erase it?

Code:
[user@hostname]echo -e "\255"
-

---------- Post updated 02-16-12 at 11:27 AM ---------- Previous update was 02-15-12 at 05:42 PM ----------

I got the answer sort of - I use the following in vi to remove the \255's:

Code:
:%!tr -d '\255'


Last edited by MaindotC; 02-15-2012 at 05:53 PM..
Sponsored Links
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
awk command to replace ";" with "|" and ""|" at diferent places in line of file shis100 Shell Programming and Scripting 7 03-16-2011 07:59 AM
Make scipt except from "Y","y" and "yes" to take [Enter] as being "yes" hakermania Shell Programming and Scripting 4 12-11-2010 09:24 AM
ps -ef | grep "string1" "string2" " "string3" steve2216 Shell Programming and Scripting 11 09-03-2010 11:08 AM
Explain the line "mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'`" Lokesha UNIX for Dummies Questions & Answers 4 12-20-2007 12:52 AM



All times are GMT -4. The time now is 03:42 AM.