Sed Cheatsheet

Just a post about some of the sed lines I find scattered, to be extend in future edits.

Merge same Lines Together

$ sed '/^ \*$/{h;d};{H;s/.*//;x;s/^\n//}'

This sed example merges all “ *” lines that follow each other (e.g. empty lines in a class level Docblock comment in a PHP file). The pattern can be replaced with any pattern to describe the lines to merge together.

It copies each matching line into the hold buffer and drops the line.

On any other non matching line, the line is appended to the hold buffer, the read buffer emptied and exchanged w/ the hold buffer (clearing the hold buffer), any starting newline removed from the pattern space (as appending to an empty hod buffer would have created it but it’s unwanted).

Limitations: Won’t work when line pattern matches the last line / GNU sed

Indent all but first line

$  | sed '1{p;d}; s/^/  /'

1 applies to first line only, p prints and d deletes so there is no continuation to the second expression in which s searches for ^ start of line to replace it with two spaces. ; separates expressions, { and } group them.

switch -e has been left out.

Similar to

$  | sed '1p; 1d; s/^/  /'
This entry was posted in Hakre's Tips, Uncategorized and tagged . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.