What does this mean in a shell script?

| sed 's/ /':'/' | sed 's/ /-/' > file.list

1 Answer 1


Assuming the context is

some-command | sed 's/ /':'/' | sed 's/ /-/' > file.list

Let's break it apart piece by piece. Suppose for example that some-command is echo 'test of the command'.

Then sed 's/ /':'/' replaces the first space by :.

test of the commandtest:of the command

After that, sed 's/ /-/' replaces the new first space by -

test:of the commandtest:of-the command

This transformation is applied on each line of the output of some-command.

As mentioned by @Philippos in the comments, it is unclear why : is unquoted here. It would be better as

some-command | sed 's/ /:/' | sed 's/ /-/' > file.list

But sed is not restricted to a single replacement per instance. So even better is

some-command | sed 's/ /:/; s/ /-/' > file.list
  • You could add that there is no obvious reason why the : is outside the quoting or why this is double-piped instead of sed 's/ /:/;s/ /-/'
    – Philippos
    May 2, 2017 at 16:39

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .