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 comment

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