sed -- Find pattern -- print remainder -- plus lines up to pattern -- Minus pattern


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting sed -- Find pattern -- print remainder -- plus lines up to pattern -- Minus pattern
# 1  
Old 10-10-2015
sed -- Find pattern -- print remainder -- plus lines up to pattern -- Minus pattern

The intended result should be :

Code:
PDF converters
'empty line'
gpdftext and pdftotext

Code:
?xml version="1.0"?>
xml:space="preserve"><note-content version="0.1" xmlns:/tomboy/link" xmlns:size="http://beatniksoftware.com/tomboy/size">PDF converters

gpdftext and pdftotext</note-content>
</text><last-change-date>2015-04-06T15:23:46.813945Z</last-change-date><last-<cursor-position>-1</selection-bound-position></height></note>

I have partially succeeded with :

Code:
sed -n 's/.*oy\/size">\(.*\).*$/\1/p'
sed -n '/<\/note-content>/p'

Which gives me the first line OK,
no empty lines,
last line has the pattern included but not wanted!

If I could loop and also not print pattern this would be perfect, all with sed!
P.S. this is from gnote app, converting to text and...

Thank you for your time and help
# 2  
Old 10-10-2015
Would this do:
Code:
sed -n 's/.*oy\/size">\(.*\).*$/\1/p; s/<\/note-content>//p' file
PDF converters
gpdftext and pdftotext

?
# 3  
Old 10-10-2015
Yes, I sure can work with this.
I will dissect it and make it work the way I want!
I'm amazed at this little command and how versatile it is, the reason I want to get to know it!!

Thanks very much for your help Rudic
# 4  
Old 10-10-2015
To include the empty line, try
Code:
sed -n '/.*oy\/size">\(.*\).*$/ {s//\1/; :L; N; s/<\/note-content>//p; TL}' file
PDF converters

gpdftext and pdftotext

# 5  
Old 10-10-2015
Ah, Got it!

I was trying to find the L switch, but it is a label called L working with T. If not find pattern then go back and repeat until pattern found !!

Great!

Code:
sed -n '/.*oy\/size">\(.*\).*$/ {s//\1/; :L; N; s/<\/note-content>//p; TL}'

It looked daunting at first but then...

---------- Post updated at 11:32 AM ---------- Previous update was at 10:40 AM ----------

Code:
sed -n '/.*oy\/size">\(.*\).*$/ {s//\1/; :L; N; s/<\/note-content>//p; TL}'

Code:
sed -n '/.*oy\/size">\(.*\).*$/ {s//\1/;

Find pattern, cuts it out, s// finds nothing so prints remainder of pattern buffer. So it acts like the p

Code:
:L; N; s/<\/note-content>//p; TL}'

First pass N loads next line into pattern space, no match, unloads pattern space with p, blank line.
Goes back then finds pattern, which is deleted with // and then prints remainder with p
Next, EOF, so out.

Is this right the way I correlated the actions to the proper command sets?

Thanks
# 6  
Old 10-10-2015
Almost, but not quite.
Quote:
Find pattern, cuts it out, s// finds nothing so prints remainder of pattern buffer. So it acts like the p
The let's call it "empty regex" uses the last one applied right before. In this case: reuse the address one to find the line. (Not easy to find in the docu. I didn't. I learned it from these fora.) Nothing is printed here.
Quote:
First pass N loads next line into pattern space, no match, unloads pattern space with p, blank line.
Goes back then finds pattern, which is deleted with // and then prints remainder with p
Nothing is deleted. N just collects line after line into pattern space. The p flag to sed's s(ubstitute) prints only if a substituition was made, i.e. when the pattern was found. Then also ignore the T command and leave.
# 7  
Old 10-10-2015
Code:
sed -n '/.*oy\/size">\(.*\).*$/ {s//\1/; :L; N;

So what your saying is:

Pattern space is going to have
1: PDF converters
2: ....the whole complete line
Code:
s//\1/;

takes only the first line from pattern space, which is, 1:
and gets printed, released somewhere around, hmmm, not sure where on that line, anymore!

The rest I think I get Smilie

Ok hope it makes sense.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

[sed] Finding and sticking the pattern to the beginning of successive lines up to the next pattern

I have a file like below. 2018.07.01, Sunday 09:27 some text 123456789 0 21 0.06 0.07 0.00 2018.07.02, Monday 09:31 some text 123456789 1 41 0.26 0.32 0.00 09:39 some text 456789012 1 0.07 0.09 0.09 09:45 some text 932469494 1 55 0.29 0.36 0.00 16:49 some text 123456789 0 48 0.12 0.15 0.00... (9 Replies)
Discussion started by: father_7
9 Replies

2. Shell Programming and Scripting

sed Range Pattern and 2 lines before Start Pattern

Hi all, I have been searching all over Google but I am unable to find a solution for a particular result that I am trying to achieve. Consider the following input: 1 2 3 4 5 B4Srt1--Variable-0000 B4Srt2--Variable-1111 Srt 6 7 8 9 10 End (3 Replies)
Discussion started by: y2jacky
3 Replies

3. Shell Programming and Scripting

Match Pattern and print pattern and multiple lines into one line

Hello Experts , require help . See below output: File inputs ------------------------------------------ Server Host = mike id rl images allocated last updated density vimages expiration last read <------- STATUS ------->... (4 Replies)
Discussion started by: tigerhills
4 Replies

4. Shell Programming and Scripting

Sed: printing lines AFTER pattern matching EXCLUDING the line containing the pattern

'Hi I'm using the following code to extract the lines(and redirect them to a txt file) after the pattern match. But the output is inclusive of the line with pattern match. Which option is to be used to exclude the line containing the pattern? sed -n '/Conn.*User/,$p' > consumers.txt (11 Replies)
Discussion started by: essem
11 Replies

5. Shell Programming and Scripting

Use sed to delete remainder of line after pattern

Greetings, I need some assistance here as I cannot get a sed line to work properly for me. I have the following list: Camp.S01E04.720p.HDTV.X264-DIMENSION Royal.Pains.S05E07.720p.HDTV.x264-IMMERSE Whose.Line.is.it.Anyway.US.S09E05.720p.HDTV.x264-BAJSKORV What I would like to accomplish is to... (3 Replies)
Discussion started by: choard
3 Replies

6. Shell Programming and Scripting

sed help, Find a pattern, replace it with same text minus leading 0

HI Folks, I'm looking for a solution for this issue. I want to find the Pattern 0/ and replace it with /. I'm just removing the leading zero. I can find the Pattern but it always puts literal value as a replacement. What am I missing?? sed -e s/0\//\//g File1 > File2 edit by... (3 Replies)
Discussion started by: SirHenry1
3 Replies

7. Shell Programming and Scripting

Need one liner to search pattern and print everything expect 6 lines from where pattern match made

i need to search for a pattern from a big file and print everything expect the next 6 lines from where the pattern match was made. (8 Replies)
Discussion started by: chidori
8 Replies

8. Shell Programming and Scripting

print lines up to pattern excluding pattern

11 22 33 44 55 66 77 When pattern 55 is met, print upto it, so output is 11 22 33 44 (1 Reply)
Discussion started by: anilcliff
1 Replies

9. Shell Programming and Scripting

sed pattern to delete lines containing a pattern, except the first occurance

Hello sed gurus. I am using ksh on Sun and have a file created by concatenating several other files. All files contain header rows. I just need to keep the first occurrence and remove all other header rows. header for file 1111 2222 3333 header for file 1111 2222 3333 header for file... (8 Replies)
Discussion started by: gary_w
8 Replies

10. Shell Programming and Scripting

sed: Find start of pattern and extract text to end of line, including the pattern

This is my first post, please be nice. I have tried to google and read different tutorials. The task at hand is: Input file input.txt (example) abc123defhij-E-1234jslo 456ujs-W-abXjklp From this file the task is to grep the -E- and -W- strings that are unique and write a new file... (5 Replies)
Discussion started by: TestTomas
5 Replies
Login or Register to Ask a Question