Removing carriage returns with sed


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Removing carriage returns with sed
# 1  
Old 01-19-2006
Question Removing carriage returns with sed

How do we delete all carriage returns after a particular string using sed inside a K Shell?

e.g. I have a text file named file1 below:

Code:
$ more file1
Group#=1 User=A
 Role=a1
Group#=2 User=B
 Role=a1
 Role=b1
Group#=3 User=C
 Role=b1

I want the carriage returns to be delete on the line which starts with "Group" to have the below:


Group#=1 User=A Role=a1
Group#=2 User=B Role=a1 Role=b1
Group#=3 User=C Role=b1

Any help will be appreciated.
# 2  
Old 01-19-2006
use \r

use \r to find the carriage return and delete it so that you will get the desired output.
# 3  
Old 01-19-2006
Here is non sed solution.
Code:
[/tmp]$ cat replace.ksh 
#! /bin/ksh

SAVE=""

while read line
do

        if [[ "$line" == *Group* ]] ; then

        [[ -n $SAVE ]] && echo "$SAVE" && SAVE=""
        SAVE="$line"

        elif [[ "$line" == *Role* ]] ; then
        SAVE="$SAVE $line"
        fi ;

done < txt

        # For the last accumulated line
        echo "$SAVE"


[/tmp]$ cat txt
Group#=1 User=A
 Role=a1
Group#=2 User=B
 Role=a1
 Role=b1
Group#=3 User=C
 Role=b1
[/tmp]$ ./replace.ksh 
Group#=1 User=A Role=a1
Group#=2 User=B Role=a1 Role=b1
Group#=3 User=C Role=b1

# 4  
Old 01-19-2006
$ nawk '{ if ( $0 ~ /Group/ && NR > 1 ) { printf "\n"; } printf $0; } END { printf "\n"; }' datafile
Group#=1 User=A Role=a1
Group#=2 User=B Role=a1 Role=b1
Group#=3 User=C Role=b1
# 5  
Old 01-20-2006
Question

Thanks everyone! I have another question.

I have a text file file1 below:

Code:
$ more file1
Group#=G1
 Role=a1 Role#=[001]
 User=Adam
 User=Ben
 Role=b1 Role#=[002]
 User=Carl
Group#=G2
 Role=a1 Role#=[001]
 User=Ben
 Role=c1 Role#=[003]
 User=Carl
Group#=G3
 Role=c1 Role#=[003]
 User=Adam

...and I want to create a Korn shell that would create the desired output below (Group,Role,User) when I ran the shell using the input file1:

Code:
G1,a1,Adam
G1,a1,Ben
G1,b1,Carl
G2,a1,Ben
G2,c1,Carl
G3,c1,Adam


I first thought of making it one group per line using the awk command below :

Code:
$ awk '{ if ( $0 ~ /Group/ && NR > 1 ) { printf "\n"; } printf $0; } END { printf "\n"; }' file1

Group#=G1  Role=a1 Role#=[001]  User=Adam  User=Ben  Role=b1 Role#=[002]  User=Carl
Group#=G2  Role=a1 Role#=[001]  User=Ben  Role=c1 Role#=[003]  User=Carl
Group#=G3  Role=c1 Role#=[003]  User=Adam

I not sure what to do after thisSmilie



Any help will be appreciated.

Last edited by stevefox; 01-20-2006 at 05:27 AM..
# 6  
Old 01-20-2006
You need a KSH script or an awk script ?

Here is a ksh script.

Code:
[/tmp]$ cat steve.ksh 
#! /bin/ksh

while read line
do
        if [[ "$line" == *Group* ]] ; then

        GROUP=""
        ROLE=""
        USER=""
        GROUP=${line##*=}

        elif [[ "$line" == *Role* ]] ; then
        USER=""
        ROLE=${line#*=}
        ROLE=${ROLE%% *}

        elif [[ "$line" == *User* ]] ; then
        USER=${line##*=}
        fi ;

        [[ -n $GROUP && -n $ROLE && -n $USER ]] && echo "$GROUP,$ROLE,$USER"
done < text
[/tmp]$ ./steve.ksh 
G1,a1,Adam
G1,a1,Ben
G1,b1,Carl
G2,a1,Ben
G2,c1,Carl
G3,c1,Adam
[/tmp]$

# 7  
Old 01-23-2006
Thank you very much vino!
I had to make all the double equals signs "==" to a single equals sign "=" to get it work. and it worked great!
By the way could you tell me what the codes below which was in your script is doing?

##*=
%% *
-n

Also if there's a awk solution please tell me if you can.

cheers
Steve
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Remove carriage returns from awk output

I'm on Linux version 2.6.32-696.3.1.el6.x86_64, using the Ksh shell. I'm working with the input file: John Daggett, 341 King Road, Plymouth MA Alice Ford, 22 East Broadway, Richmond VA Orville Thomas, 11345 Oak Bridge Road, Tulsa OK Terry Kalkas, 402 Lans Road, Beaver Falls PA Eric Adams,... (2 Replies)
Discussion started by: prooney
2 Replies

2. Shell Programming and Scripting

Removing carriage returns from multiple lines in multiple files of different number of columns

Hello Gurus, I have a multiple pipe separated files which have records going over multiple Lines. End of line separator is \n and records going over multiple lines have <CR> as separator. below is example from one file. 1|ABC DEF|100|10 2|PQ RS T|200|20 3| UVWXYZ|300|30 4| GHIJKL|400|40... (7 Replies)
Discussion started by: dJHa
7 Replies

3. Shell Programming and Scripting

TR not removing carriage returns

I have a CSV with carriage returns in place of newlines. I am trying to use tr to remove them, but it isn't working. Academic year,Term,Course name,Period,Last name,Nickname 2012-2013,First Semester,English 12,4th Period,Arnold,Adam 2012-2013,First Semester,English 12,4th Period,Adams,Jim... (1 Reply)
Discussion started by: nextyoyoma
1 Replies

4. Emergency UNIX and Linux Support

Adding carriage returns to file using sed/awk

Hello, I need help adding carriage returns at specific intervals (say 692 characters) to a text file that's one continous string. I'm working in AIX5.3. Any quick help is appreciated. Thanks! (2 Replies)
Discussion started by: bd_joy
2 Replies

5. Shell Programming and Scripting

removing carriage returns in text file

Hi I have a text file that looks like this: A B C D E F G H I I want it to be reformatted to A;B;C; D;E;F; G;H;I; (4 Replies)
Discussion started by: coolnfunky
4 Replies

6. Shell Programming and Scripting

Replacing Carriage returns without loosing EOL

Hello, I have read a few threads on this subject and tried a few things out, but still come up short. There was one good example, then the last reply was something to the effect of 'Use Sed' & 'Read a book'... Well I read a bunch of online tutorials on sed, awk, tr, but still can't get the... (2 Replies)
Discussion started by: Majiktom
2 Replies

7. Shell Programming and Scripting

removing thousand of carriage returns using sed

I need to replace thousands of carriage returns/line breaks in a large xml file and with spaces. I hope to do so with a script, called, for example, "removeCRs." I would invoke this at the command line as ml5003$ sed -f /Users/ml5003/removeCRs oldFile > newFile The script, I presume, would... (4 Replies)
Discussion started by: ml5003
4 Replies

8. Shell Programming and Scripting

Remove Carriage returns between strings in a field

Is there any way to remove carriage retuns between the records? We have input records separated by TABS and have carriage returns as below: 123 456 789 ABC "1952.00" 678 "abcdef ghik lmno" Above we... (10 Replies)
Discussion started by: acheepi
10 Replies

9. Shell Programming and Scripting

spaces and carriage returns in 'here documents'

As the title suggests, i am having some trouble figuring out how to pass spaces and carriage returns to a 'here document' ie #!/bin/bash /usr/local/install_script.sh <<SCRIPT yes no <pass carriage retun here> yes no <pass a space and then a carriage return here> exit SCRIPT any... (0 Replies)
Discussion started by: hcclnoodles
0 Replies

10. Shell Programming and Scripting

sed removing carriage return and newline

Hi, I'm not very familiar with unix shell. I want to replace the combination of two carriage returns and one newline with one carriage return and one newline. I think the best way to do this is to use sed. I tried something like this: sed -e "s#\#\#g" file.txt but it doesn't work. Thanx... (2 Replies)
Discussion started by: mored
2 Replies
Login or Register to Ask a Question