Visit Our UNIX and Linux User Community


Using sed to extract line of a file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Using sed to extract line of a file
# 1  
Old 05-08-2019
Using sed to extract line of a file

Ok .. This is driving me nuts. I suppose I need another set of eyes.

Example Data
Code:
interface Vlan1
 description xxxxxxxxxxxx
 ip address 192.168.1.1 255.255.255.252
 no ip redirects
 no ip proxy-arp
 ip flow ingress
 ip pim sparse-mode
 load-interval 30
!
interface Vlan2
 description xxxxxxxxxxxx
 ip address 192.168.120.106 255.255.255.252
 no ip redirects
 no ip proxy-arp
 ip flow ingress
 ip pim sparse-mode
 load-interval 30
!
interface Vlan3
 description xxxxxxxxxxxx
 ip address 192.168.201.3 255.255.255.0
 ip helper-address 192.168.228.188
 ip helper-address 192.168.97.199
 ip helper-address 192.168.133.140
 ip helper-address 192.168.152.194
 no ip redirects
 no ip proxy-arp
 ip pim sparse-mode
 standby 0 ip 192.168.201.1
 standby 0 timers 1 3
 standby 0 authentication baronet2
!
interface Vlan4
 description xxxxxxxxxxxx
 ip address 192.168.120.110 255.255.255.252
 no ip redirects
 no ip proxy-arp
 ip flow ingress
 ip pim sparse-mode
 load-interval 30
!
interface Vlan5
 description xxxxxxxxxxxx
 ip address 192.168.202.3 255.255.255.0
 ip helper-address 192.168.228.188
 ip helper-address 192.168.97.199
 ip helper-address 192.168.133.140
 ip helper-address 192.168.152.194
 no ip redirects
 no ip proxy-arp
 ip pim sparse-mode
 standby 0 ip 192.168.202.1
 standby 0 timers 1 3
 standby 0 priority 105
 standby 0 preempt

The Results I am looking for is / are :

Interface and ip helper addresses associated with that interface

Code:
interface Vlan603
  ip helper-address 192.168.228.188
 ip helper-address 192.168.97.199
 ip helper-address 192.168.133.140
 ip helper-address 192.168.152.194
 

interface Vlan604
  ip helper-address 192.168.228.188
 ip helper-address 192.168.97.199
 ip helper-address 192.168.133.140
 ip helper-address 192.168.152.194
 etc 
 etc

I thought I solved this once before .. but lost some stuff in a new work laptop transition.

Any help would be appreciated.

POP
# 2  
Old 05-08-2019
How about
Code:
awk '/^ *interface/ {IF = $0} /helper/ {if (IF) print IF; IF = ""; print}' file
interface Vlan3
 ip helper-address 192.168.228.188
 ip helper-address 192.168.97.199
 ip helper-address 192.168.133.140
 ip helper-address 192.168.152.194
interface Vlan5
 ip helper-address 192.168.228.188
 ip helper-address 192.168.97.199
 ip helper-address 192.168.133.140
 ip helper-address 192.168.152.194

EDIT: or, with sed,

Code:
sed -n '/^ *interface/ { :L1; x; /helper/ p; n; }; :L2; /helper/ {H; n; bL2; }; $ bL1;' file


Last edited by RudiC; 05-08-2019 at 10:34 AM..
This User Gave Thanks to RudiC For This Post:
# 3  
Old 05-08-2019
grep is simple stupid, but maybe good enough?
Code:
grep -E "interface|ip helper-address" file

--- Post updated at 20:20 ---

A simple sed solution (works like the awk sample in post #2)
Code:
sed '/interface/x; /ip helper-address/!d; x; /./p; s/.*//; x' file

This User Gave Thanks to MadeInGermany For This Post:
# 4  
Old 05-09-2019
Code:
$ awk -F'\n' ' $0 ~ /interface.*helper-address/ { print $1,$4, $5, $6, $7 } ' RS='!\n' OFS="\n" file
interface Vlan3
 ip helper-address 192.168.228.188
 ip helper-address 192.168.97.199
 ip helper-address 192.168.133.140
 ip helper-address 192.168.152.194
interface Vlan5
 ip helper-address 192.168.228.188
 ip helper-address 192.168.97.199
 ip helper-address 192.168.133.140
 ip helper-address 192.168.152.194

# 5  
Old 05-09-2019
Quote:
Originally Posted by anbu23
Code:
$ awk -F'\n' ' $0 ~ /interface.*helper-address/ { print $1,$4, $5, $6, $7 } ' RS='!\n' OFS="\n" file

Interesting separator technique, but seems to only work with GNU awk.
And, of course, the positions and amounts of the "helper-address" lines may vary...
# 6  
Old 05-09-2019
Just another way to do the same

Code:
awk '/^interface/{i=$0}/helper/{ print ((i!=z)?i RS:z) $0 ; i=z }' yourfile


Previous Thread | Next Thread
Test Your Knowledge in Computers #576
Difficulty: Medium
All programming languages have automatic garbage collection that monitors the dynamically allocated pieces of memory and determine if any variable in the program still references it. If the memory is no longer referenced, it is 'garbage' and becomes eligible to be 'collected'.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Perl to extract information from a file line by line

In the below perl code I am using tags within each line to extract certain information. The tags that are used are: STB >0.8 is STRAND BIAS otherwise GOOD FDP is the second number GO towards the end of the line is read into an array and the value returned is outputed, in the first line that... (1 Reply)
Discussion started by: cmccabe
1 Replies

2. Shell Programming and Scripting

sed or awk, cut, to extract specific data from line

Hi guys, I have been trying to do this, but... no luck so maybe you can help me. I have a line like this: Total Handled, Received, on queue Input Mgs: 140 / 14 => 0 I need to, get the number after the / until the =, to get only 14 . Any help is greatly appreciated. Thanks, (4 Replies)
Discussion started by: ocramas
4 Replies

3. Shell Programming and Scripting

HELP: Shell Script to read a Log file line by line and extract Info based on KEYWORDS matching

I have a LOG file which looks like this Import started at: Mon Jul 23 02:13:01 EDT 2012 Initialization completed in 2.146 seconds. -------------------------------------------------------------------------------- -- Import summary for Import item: PolicyInformation... (8 Replies)
Discussion started by: biztank
8 Replies

4. Shell Programming and Scripting

extract a line from a file by line number

Hi guys, does anyone know how to extract(grep) a line from the file, if I know the line number? Thanks a lot. (9 Replies)
Discussion started by: aoussenko
9 Replies

5. Shell Programming and Scripting

Extract a number from a line in a file and sed in another copied file

Dear all, I am trying to extract a number from a line in one file (task 1), duplicate another file (task 2) and replace all instances of the strings 300, in duplicated with the extracted number (task 3). Here is what I have tried so far: for ((k=1;k<4;k++)); do temp=`sed -n "${k}p"... (2 Replies)
Discussion started by: mnaqvi
2 Replies

6. Shell Programming and Scripting

get the fifth line of a text file into a shell script and trim the line to extract a WORD

FOLKS , i have a text file that is generated automatically of an another korn shell script, i want to bring in the fifth line of the text file in to my korn shell script and look for a particular word in the line . Can you all share some thoughts on this one. thanks... Venu (3 Replies)
Discussion started by: venu
3 Replies

7. UNIX for Dummies Questions & Answers

Using sed to extract a substring at end of line

This is the line that I am using: sed 's/^*\({3}*$\)/\1 /' <test.txt >results.txt and suppose that test.txt contains the following lines: http://www.example.com/200904/AUS.txt http://www.example.com/200903/_RUS.txt http://www.example.com/200902/.FRA.txt What I expected to see in results.txt... (6 Replies)
Discussion started by: figaro
6 Replies

8. Shell Programming and Scripting

extract a line from a file using the line number

Hello, I am having trouble extracting a specific line from a file when the line number is known. My first attempt involved grep -n 'hi' (the word 'hi will always be there) to get the line number before the line that I actually want (line 4). Extra Notes: -I am working in a bash script. -The... (7 Replies)
Discussion started by: grandtheftander
7 Replies

9. Shell Programming and Scripting

extract file extension using sed

Hi, how can i extract file extension using sed? for e.g., if a file name is abc.txt then how can i get "txt" (after .) Thanks praveen (7 Replies)
Discussion started by: r_praveenk
7 Replies

10. Shell Programming and Scripting

Extract a line from a file using the line number

I have a shell script and want to assign a value to a variable. The value is the line exctrated from a file using the line number. The line number it is not fix, and could change any time. I have tried sed, awk, head .. See my script # Get randome line number from the file #selectedline = `awk... (1 Reply)
Discussion started by: zambo
1 Replies

Featured Tech Videos