#!/usr/bin/perl use strict; use warnings; while () { next unless /Bus Timetable/; for 1..3; my $line; until (($line = ) =~ /^\+/) { # Find index of the first '|' after the first one. my $idx = index($line, "|", 1); # From that position (+2), capture the remaining string $line = substr($line, $idx+2); # Remove the '|' characters $line =~ s/\|//g; # Capture the first four fields my ($fr, $dep, $to, $arr) = split ' ', $line; print "$fr$dep:$to$arr\n"; } } __DATA__ ---TEXT BEFORE--- +---------------+ | Bus Timetable | +---------------+----+------------+-----------+------+ | BUS SERVICE DAY tm | FROM DEPT | TO ARR | 24/7 | +--------------------+------------+-----------+------+ | C4 metro mon 15 | twn 0900 | Apt 1011 | yes | | C6 intl mon 45 | LDN 1000 | XTR 1426 | no | | B2 susx mon 20 | cly 1034 | btn 1118 | no | | A0 xxxxx xxx xx | xxx xxxx | xxx xxxx | xxx | +--------------------+------------+-----------+------+ ---TEXT AFTER--- +---------------+ | Bus Timetable | +---------------+----+-----------------+------------+------+ | BUS SERVICE DAY tm | FROM DEPT | TO ARR | 24/7 | +--------------------+-----------------+------------+------+ | C4 mon 15 | twn 0900 | Apt 1011 | yes | | intl mon | LoDoN 1000 | XTR 1426 | | | B2 sussex 20 | cly 1034 | brgtn 1118 | no | | A0 | manchester 1212 | xxx xxxx | xxx | +--------------------+-----------------+------------+------+ **** RESULTS ******* *********************** twn0900:Apt1011 LDN1000:XTR1426 cly1034:btn1118 xxxxxxx:xxxxxxx twn0900:Apt1011 LoDoN1000:XTR1426 cly1034:brgtn1118 manchester1212:xxxxxxx