a very basic sed one-liner...that isn't working :-(


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting a very basic sed one-liner...that isn't working :-(
# 1  
Old 10-08-2009
a very basic sed one-liner...that isn't working :-(

Greetings all. Smilie

I would like to use sed to join all non-blank lines together in a particular file. I was thinking I could do this by simply replacing the terminating, new-line character on every line which is not blank, but I must be missing something in my sed line:

Code:
$ sed '/^.*$/s/\n$/\t/' InputFile

The solution here needs to leave blank lines untouched as the file is setup so blank lines mark the beginning of a new block of related lines, like so:

Code:
 
ROUTER-1-1
Virtual-Access1 is up, line protocol is up
Hardware is Virtual Access interface
MTU 1500 bytes, BW 256 Kbit, DLY 20000 usec,
reliability 255/255, txload 5/255, rxload 4/255
Encapsulation PPP, LCP Open
 
Dialer0 is up, line protocol is up (spoofing)
Hardware is Unknown
Internet address is 192.168.1.1/32
MTU 1500 bytes, BW 56 Kbit, DLY 20000 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation PPP, loopback not set
 
Virtual-Access1 is up, line protocol is up
Hardware is Virtual Access interface
MTU 1500 bytes, BW 256 Kbit, DLY 20000 usec,
reliability 255/255, txload 5/255, rxload 4/255
Encapsulation PPP, LCP Open
 
Loopback0 is up, line protocol is up
Hardware is Loopback
Description: Version 1.2
Internet address is 10.0.1.1/32
MTU 1514 bytes, BW 8000000 Kbit, DLY 5000 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation LOOPBACK, loopback not set

Essentially, each original line in a block will end-up as a tab-delimited field on a single line of output; Something like this:

Code:
 
ROUTER-1-1 Virtual-Access1 is up, line protocol is up Hardware is Virtual Access interface MTU 1500 bytes, BW 256 Kbit, DLY 20000 usec, reliability \ ...
 
Dialer0 is up, line protocol is up (spoofing) Hardware is Unknown Internet address is 192.168.1.1/32 MTU 1500 bytes, BW 56 Kbit, DLY 20000 usec, \ ...
 
Virtual-Access1 is up, line protocol is up Hardware is Virtual Access interface MTU 1500 bytes, BW 256 Kbit, DLY 20000 usec, reliability \ ...
 
Loopback0 is up, line protocol is up Hardware is Loopback Description: Version 1.2 Internet address is 10.0.1.1/32 MTU 1514 bytes, BW 8000000  \ ...

Please correct my misguided ways and also let me know if you have a more eligant solution to this problem.


Thanks!
--Steve
(Linux newbie...in case you couldn't tell)

p.s.
For anyone out there reading this on a small monitor, I'm sorry if my lines of example output are excessively long. Smilie

I thought about using shorter (...and more boring) lines of input, but in the end, thought it might be more interesting and instructive if I included the real-world data with which I'm working.

If I made the wrong call here, let me know and I'll refrain from including long lines in my future posts.
# 2  
Old 10-09-2009
You have to use N command in sed to append the next line to the pattern space.

Code:
$ sed '
/^$/b
:loop
$! {
N
/\n *$/!b loop
}
s/\n\([^ ]\)/\t\1/g' a

ROUTER-1-1      Virtual-Access1 is up, line protocol is up      Hardware is Virtual Access interface    MTU 1500 bytes, BW 256 Kbit, DLY 20000 usec,    reliability 255/255, txload 5/255, rxload 4/255 Encapsulation PPP, LCP Open

Dialer0 is up, line protocol is up (spoofing)   Hardware is Unknown     Internet address is 192.168.1.1/32      MTU 1500 bytes, BW 56 Kbit, DLY 20000 usec,    reliability 255/255, txload 1/255, rxload 1/255  Encapsulation PPP, loopback not set

Virtual-Access1 is up, line protocol is up      Hardware is Virtual Access interface    MTU 1500 bytes, BW 256 Kbit, DLY 20000 usec,    reliability 255/255, txload 5/255, rxload 4/255 Encapsulation PPP, LCP Open

Loopback0 is up, line protocol is up    Hardware is Loopback    Description: Version 1.2        Internet address is 10.0.1.1/32 MTU 1514 bytes, BW 8000000 Kbit, DLY 5000 usec, reliability 255/255, txload 1/255, rxload 1/255 Encapsulation LOOPBACK, loopback not set

Explanation

Code:
1. Keeps adding the non-empty line. and replace new line with tab.
2. When empty line/(lines with only spaces) comes, just print the pattern space and start next cycle. i.e s/\n\([^ ]\)/\t\1/g' a this substitution will not happen for empty lines.

# 3  
Old 10-09-2009
Don't know for sed but if awk is ok for you:

Code:
awk '{ORS=(/^ $/)?"\n\n":" "}1' file

# 4  
Old 10-09-2009
with GNU sed
Code:
:y
s/\n/ /
N
/\n *$/!by

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. HP-UX

Syslog daemon isn't working

Hi All, I've tried starting syslogd on our hp-ux 11.31 server. However, it is not getting started nor it is updating the syslog file. There is no space issue also. However, the mail.log file is approx 2GB, can that be of any issue. Please find the details below: # /sbin/init.d/syslogd... (2 Replies)
Discussion started by: Kits
2 Replies

2. Shell Programming and Scripting

Chmod working in sudo run script but chown isn't

My git user has permission in sudoers to run a wrapper script to move files into my webroot. Everything is working fine except for the chown line. After the script has run, the files ar still root:root instead of apache:apache. Scratching my head...:confused: #!/bin/sh echo echo "****... (4 Replies)
Discussion started by: dheian
4 Replies

3. Shell Programming and Scripting

export of a variable isn't working

Hi I want export input data ... echo "month: " read m export m=$m also export m is not working ? the month-variable should be exportet for the use in other scripts, but it is not working like this. What i'm doing wrong? Thanks in advance! IMPe (10 Replies)
Discussion started by: IMPe
10 Replies

4. Shell Programming and Scripting

String == isn't working in [[-test

Hi. I'm new to this forum, my English perhaps is not so good, but here is my question: In bash you can use ] for tests, and how I understand it the variable names should be expanded automatically. So this should give "yes": xx=hello $ ] && echo yes || echo no no # not giving "yes" These two... (2 Replies)
Discussion started by: 244an
2 Replies

5. Shell Programming and Scripting

crontab - runninf a java script just isn't quite working...

hi gurus. I have a little script that runs java from a certain directory. This script runs fine when run manually but when I try to schedule it, it fails to find the script. little_script.sh.. /<directory of java>/java -classpath... (3 Replies)
Discussion started by: MrCarter
3 Replies

6. Shell Programming and Scripting

awk isn't working

awk 'BEGIN{print '1.2449'**0.5}' awk: line 1: syntax error at or near * can someone help me troubleshoot the above command? i'm trying to do the square root of 1.2449. this command works on Red Hat, but for some reasonn isn't working on kubuntu (latest version). shell is bash. i... (3 Replies)
Discussion started by: SkySmart
3 Replies

7. OS X (Apple)

Canot find library on compile - fixing PKG_CONFIG_PATH isn't working

I am using bash on OSX Leopard. When I attempt ./configure I get this error: checking for OPENSSL... configure: error: Package requirements (openssl) were not met: No package 'openssl' found Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a... (2 Replies)
Discussion started by: reasonstoprefer
2 Replies

8. UNIX for Dummies Questions & Answers

Why isn't this working? tsch-doit file

#! /usr/tsch foreach f (`cat contacts.list`) awk '{printf ($2 in a) ? ","$5 : (NR>1) ? RS $2 FS $5 : $2 FS $5; a} END{print e}' $f > $f_inter.map end My file: cat contacts.list is just a list of files. I get this error: doit_contacts2intermap.sh: Command not found. Thanks! (1 Reply)
Discussion started by: lost
1 Replies

9. UNIX for Dummies Questions & Answers

Which Sendmail version ? and why -d isn't working

Hi, I am trying to figure out which version I am running of sendmail, but I am buffed. This is what I get sendmail -d0.1 -bt < /dev/null sendmail: illegal option -- d Telneting to my host: ~]$ telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is... (1 Reply)
Discussion started by: saariko
1 Replies

10. Solaris

grep -r isn't working

Hi, I was trying to use this particular option of grep grep -r 'Search_pattern' * This command should ideally search all the occurrences of Search_pattern recursively within a directory & print it on shell prompt. But this command is not doing what is expected. It just displays nothin! ... (8 Replies)
Discussion started by: harishmitty
8 Replies
Login or Register to Ask a Question

Featured Tech Videos