In sed, the closest thing to a function that you can have is a label. A function is useful because you can execute its code multiple times, thus saving a lot of bytes. In sed however you would need to specify the return label and as such you can't simply call this "function" multiple times throughout your code the way you would do it in other languages. The workaround I use is to add in one of the two memories a flag which is used to select the return label. This works best when the function code only needs one (the other) memory space, but the same principle can be applied if using both memories, with care given to the handling of that flag. **Example showing what I mean** taken from a project of mine to write a small game in sed: <!-- language: lang-sed --> # after applying the player's move, I overwrite the pattern space with the flag "P" s/.*/P/ b check_game_status :continue_turn_from_player #code b calculate_bot_move :return_bot_move # here I call the same function 'check_game_status', but with a different flag: "B" s/.*/B/ b check_game_status :continue_turn_from_bot #code (like say 'b update_screen') :check_game_status # this needs just the hold space to run #code /^P$/b continue_turn_from_player /^B$/b continue_turn_from_bot