Sed in vi - \r and \n not giving desired results


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Sed in vi - \r and \n not giving desired results
# 1  
Old 06-23-2011
Sed in vi - \r and \n not giving desired results

I use many different machines at work, each with different versions of o/s's and installed applications. Sed in vi is particularly inconvenient in the sense that sometimes it will accept the "\r" as a carriage return, sometimes not. Same thing with "\n". For instance, if I have a list of hosts that are all on one line separated by a space then I need them in line-by-line format. On some machines I can do this in vi:

Code:
:%s/ /\r/g

or
Code:
:%s/ /\n/g

I don't know if the editor will accept \r or \n until I try. On some machines it will treat either as a regular character by inserting an "r" or "n" in place of the spaces. Is this relative to my version of vi, o/s, sed, or all? I'm assuming \r and \n are ASCII characters. Is there a chance the ASCII chars are defined differently depending on the o/s? (I thought it was a standard) How can I determine in advance which host will accept \r or \n as carriage return and newline, respectively, before I start vi?

I do not have the authorisation to upgrade the o/s or editors to the latest versions.
# 2  
Old 06-23-2011
I generally use either \ or cntrl-v or \ + cntrl-v in front of enter for cr or nl in vi, aka 'visual ex', in ':' mode, which is raw 'ex', which is extended 'ed'.

BTW, sed, the stream editor, likes \n in regex (from field of substitute s) and \ + linefeed in substitute s to field, treats cr as a literal.

The other versions of vi (ex) and sed may honor \r and \n in other contexts, but as you note, it is spotty.

You can install in your own home dir a GNU version of vi and sed, and put it up-PATH to have a consistent home world. If on another ID, having your personal tools in a directory is handy, as you can add the dir up-PATH while you are there to get to your tools. You have to write scripts that do not assume your ID. You can share the tools to others easily, too. You just have to use the old tool where you cannot get to your version and in prod scripts.
# 3  
Old 06-23-2011
Quote:
Originally Posted by MaindotC
Is this relative to my version of vi, o/s, sed, or all?
On some old versions of sed the only way to get a newline is to stick a literal newline in the string, ugh.
# 4  
Old 06-23-2011
Beauty is in the eye of the beholder. I like my lines to stay lines, so I never looked for a replacement for '\
'. Often, in C/C++, I put strings in one line per, like:
Code:
        fputs(
"\n"
"Usage: snark [ file_name . . . ]\n"
"\n"
"Encodes each file with sarcasm, producing an output file: <file_name>.nyuk\n"
"Cannot be used in Nyack.\n"
"\n",
            stderr );

# 5  
Old 06-23-2011
Quote:
Originally Posted by DGPickett
Beauty is in the eye of the beholder. I like my lines to stay lines, so I never looked for a replacement for '\
'.
sed can't match newlines anyway, he must be adding newlines.
# 6  
Old 06-23-2011
sed matches newlines, which sed puts in the buffer with s or N:
Code:
$ echo 'x
y' | sed '
  N
  /\n/p
  s/.*/line1\
line2/
  /\n/p
  s/\n/&&&&/
  p
  s/\n/\\n/g
 '
x
y
line1
line2
line1
 
 
 
line2
line1\n\n\n\nline2


Last edited by DGPickett; 06-23-2011 at 05:35 PM..
# 7  
Old 06-23-2011
Quote:
Originally Posted by DGPickett
sed matches newlines
.* is not a newline, you're matching everything but the newline, which doesn't get stored when sed reads a line from stdin.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Comm giving unexpected results

Hi I am comparing two files with comm -13 < (sort acc11.txt) < (sort acc12.txt) > output.txt purpose: Get non matching records which are in acc12 but not in acc11... TI am getting WRONG output. Is there any constraints with record length with comm? The above files are the two consective ... (2 Replies)
Discussion started by: vedanta
2 Replies

2. Shell Programming and Scripting

sed and awk giving error ./sample.sh: line 13: sed: command not found

Hi, I am running a script sample.sh in bash environment .In the script i am using sed and awk commands which when executed individually from terminal they are getting executed normally but when i give these sed and awk commands in the script it is giving the below errors :- ./sample.sh: line... (12 Replies)
Discussion started by: satishmallidi
12 Replies

3. UNIX for Dummies Questions & Answers

Grep not giving expected results

Version: RHEL 5.8 I am doing a grep of the piped output from ps command as shown below. I am grepping for the pattern ora_dbw* . But, in the result set I am seeing strings with ora_dbr* as well like ora_dbrm_SDLM1DAS3 as shown below. Any idea why is this happening ? $ ps -ef | grep... (6 Replies)
Discussion started by: John K
6 Replies

4. UNIX for Dummies Questions & Answers

[Solved] Slight variation from the desired results

Hello, I am writing a small one liner script to display the tables in my database. I am working with Centos 5.5 and postgresql the command is "psql -c "\dt" | awk '{print$3}'" I just want the 3rd column from the result set, but now the problem is I am getting the third column but with... (3 Replies)
Discussion started by: nnani
3 Replies

5. HP-UX

find -mtime giving strage results in HP-UX

Hi, I am using HP-UX B.11.23 U ia64 I am trying to retrieve files using -mtime option of find command However I found that -mtime is not giving correct results Following is the output of commands executed on 03-Dec-2009 It can be seen that -mtime +1 should have returned all... (2 Replies)
Discussion started by: Chetanaz
2 Replies

6. Shell Programming and Scripting

HELP: I need to sort a text file in an uncommon manner, can't get desired results

Hi All I have a flat text file. Each line in it contains a "/full path/filename". The last three columns are predictable, but directory depth of each line varies. I want to sort on the last three columns, starting from the last, 2nd last and 3rd last. In that order. The last three columns... (6 Replies)
Discussion started by: JakeKatz
6 Replies

7. Shell Programming and Scripting

awk script giving unstable results

Hi all Here I came accross a situation which i am unable to reason out... snippet 1 psg ServTest | grep -v "grep" | grep -v "vi" | awk '{ pgm_name=$8 cmd_name="ServTest" gsub(/]*/,"",pgm_name) if(pgm_name==cmd_name) { print "ServTest Present =" cmd_name} }'... (10 Replies)
Discussion started by: Anteus
10 Replies

8. Shell Programming and Scripting

script not giving the desired output

Hi, I have a script in which an entry like this ..... FILENAME_B="PIC_${DATE}0732*.JPG" The script connects to an ATM and pull a pic file from it.The format for the file is like PIC_2008061400000001.JPG in the ATM. Means 1st 8 digit is the date(YYYYMMDD) field 2nd 8 digit means hrs... (2 Replies)
Discussion started by: Renjesh
2 Replies

9. Shell Programming and Scripting

egrep not giving desired results

I have written a shell script which looks like below: grep -v ',0,' ./DATA/abc.001 > ./DATA/abc.mid egrep $GREPSEARCH ./DATA/ebc.mid > ./DATA/abc.cut the variable GREPSEARCH has values like the below: ... (3 Replies)
Discussion started by: igandu
3 Replies

10. Shell Programming and Scripting

Script giving wrong results....

hi, I have this script which gives me the result... #! /usr/bin/sh set -x cd /home/managar a=1 while true do if then echo " File log.txt exists in this directory " exit 0 fi echo " File has not arrived yes..." sleep 3 let a=a+1 if then (1 Reply)
Discussion started by: mgirinath
1 Replies
Login or Register to Ask a Question