remove line feeds followed by character

Thread Tools Search this Thread
Top Forums Shell Programming and Scripting remove line feeds followed by character
# 1  
Old 07-07-2011
remove line feeds followed by character

Hi everyone,

I'm very new to using sed, run through some tutorials and everything but I've hit a problem that I'm unable to solve by myself.

I need to remove all linefeeds that are followed by a particular character (in this case a semicolon). So basically, all lines starting with a semicolon should be appended to the previous line.
Because of the per-line nature of sed, I haven't been successful... I know I can use N to somehow search through multiple lines but that hasn't gotten me anywhere. I've tried the following with no success.

sed 'N;s/\n;/;/' old > new

Thanks in advance.
# 2  
Old 07-07-2011
perl -0pe 's/\n;/;/g' input

This User Gave Thanks to getmmg For This Post:
# 3  
Old 07-07-2011
awk '/;$/{printf $0; next}1' file

This User Gave Thanks to Franklin52 For This Post:
# 4  
Old 07-07-2011
Thanks a bundle, guys. getmmg's solution worked like a charm.
# 5  
Old 07-07-2011

Using 'sed':
$ cat infile
$ cat script.sed
#!/bin/sed -nf                                                                                                                                                                      
## First line: copy it to 'hold space' and read next one.                                                                                                                           
1 { h ; n }                                                                                                                                                                         
## Lines beginning with ';': Append to 'hold space'. If last line, skip to                                                                                                          
## label 'l' to print rest of content, else begin next cycle.                                                                                                                       
/^;/ { H ; $ bl ; b }                                                                                                                                                               
## A line without ';' at the beginning. Print lines saved in 'hold 'space'                                                                                                          
## removing '\n' chars and print it.                                                                                                                                                
x ; s/\n;/;/g ; p                                                                                                                                                                   
## Last line: If begins with ';' it will have been printed before, else take                                                                                                        
## it from 'hold space' and print it.                                                                                                                                               
$ { x ; /^;/! p }
$ ./script.sed infile

This User Gave Thanks to birei For This Post:
# 6  
Old 07-07-2011
Originally Posted by birei
/^;/ { H ; $ bl ; b }

In case you are interested in writing the most portable sed possible, using a semicolon after a branch command is not portable. With that syntax, the script may not work with most implementations. If portability is desired, it's best to use a newline after each branch command.

For fun, here's a sed solution which does not use branching. It's a bit shorter but not as clear as your approach (and probably not as efficient, since it unconditionally executes the substitute command for each line read).

sed -n '/^;/H; x; s/\n;/;/; x; /^;/!{x; 1!p;}; ${x;p;}'

This User Gave Thanks to alister For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Remove character from a column in each line

Hi, I am a newbie to shell scripting (.sh). Please guide me on how to do the below issue. My input file has below data. I want to remove $ sysmbol from the fourth column of each line. (ie, between 4th and 5th pipe symbol) ABC25160|51497|06/02/2010|$32,192.07|MARK|$100|A... (3 Replies)
Discussion started by: rsreejithmenon
3 Replies

2. UNIX for Dummies Questions & Answers

Remove last character in each line

Hi guys, Does anyone know how to remove the last character in each of the line? This is what I have: ABCDE.1 GLSJD.2 HIJPL.2 HKAGB.3 IUBWQ.1 What I want (remove the dot and number): ABCDE GLSJD HIJPL HKAGB IUBWQ I tried to use this: sed 's/.*//' But I'm not sure if that is... (3 Replies)
Discussion started by: narachaid
3 Replies

3. Shell Programming and Scripting

How to remove , if first character on line

Hi, I have a file with lines such as the below. I want to remove the comma only if it is the first character on a line. I can't work out how to do this using sed. *ELSET, ELSET=WHEEL_TD2 63, 64, 65, 72, 82, 88, 89, 92, 120, 121, 152, 181, 190, 221, 252, 259 , 260, 282, 283, 285, 286,... (2 Replies)
Discussion started by: carlr
2 Replies

4. Shell Programming and Scripting

useless line feeds in ldapsearch output. Howto remove with shell script?

Hi $ cat ldapsearorg -x -LLL -h -D "CN=ADMINZZ,OU=AdminRoles,DC=testbadbigcorp,DC=org" -w "UT3w4f57lll--4...4" -b "OU=Test,DC=testbadbigcorp,DC=org" "(&(&(&(&(objectCategory=person)(objectClass=user)(lockoutTime:1.2.840.113556.1.4.804:=4294967295)))))" dn$... (3 Replies)
Discussion started by: slashdotweenie
3 Replies

5. HP-UX

How to remove new line character and append new line character in a file?

Hi Experts, I have data coming in 4 columns and there are new line characters \n in between the data. I need to remove the new line characters in the middle of the row and keep the \n character at the end of the line. File is comma (,) seperated. Eg: ID,Client ,SNo,Rank 37,Airtel \n... (8 Replies)
Discussion started by: sasikari
8 Replies

6. UNIX for Advanced & Expert Users

To remove new line character

Hi, I am facing one interesting problem : I have a file which contains data like this 459,|1998-11-047|a |b |c \n efg | d|e | \n 459,|1998-11-047|a \n c|b |c \n efg | d|e | \n Basically what I have to do is , I have to remove all \n which is coming ( enclosed ) in between... (7 Replies)
Discussion started by: shihabvk
7 Replies

7. Shell Programming and Scripting

sed: remove first character from particular line

Hello Experts, I have a file "tt.txt" which is like: #a1=a2 b1=b2 #c1=c2 I need to remove the pound (#) sign from a particular line. In this case let us assume it's 3rd line : "#c1=c2" I can do it through: sed "s/#c1=c2/c1=c2/" tt.txtbut it is possible that I may not know the value... (6 Replies)
Discussion started by: hkansal
6 Replies

8. UNIX for Dummies Questions & Answers

Trying to remove single character from a line

Here is a sample code grep '903' -i user.txt | tail -2 | awk '{print $2}' | sed 's/B//g' the input file has data as such 903-xxx-xxxxB 903-xxx-xxxxB It is a dialer file i want to remove the "B" any help thanks (5 Replies)
Discussion started by: Iz3k34l
5 Replies

9. Shell Programming and Scripting

Remove line feeds

Hi, I have a fixed width flat file which has 1 as the first char and E as the last character. Some of the records have a carriage return /line feeds . how do I remove them? Let me know. Thanks VSK (8 Replies)
Discussion started by: vsk
8 Replies

10. Shell Programming and Scripting

Remove Last Character of Line

Hi, I need to put the single line contents of a file into a variable, but remove the last character, for example the file would have this sort of contents: 2;4;3;10;67;54;96; And I want the variable to be: 2;4;3;10;67;54;96 (notice the last ";" has gone). Unfortunately I can't just... (4 Replies)
Discussion started by: danhodges99
4 Replies
Login or Register to Ask a Question