# sed-safe escaping for replacement strings. # # Intended usage: # sed "sPATTERN{{ value | sed_escape('') }}" # # Escapes: # - backslash (\) # - ampersand (&) → sed replacement reference # - delimiter (default: |) # # Does NOT: # - add quotes # - perform shell escaping # # Safe for: # - sed replacement part # - passwords containing $, ', ", spaces, /, etc. # from __future__ import annotations class FilterModule: def filters(self): return { "sed_escape": self.sed_escape, } @staticmethod def sed_escape(value, delimiter: str = "|") -> str: """ Escape a value for use as the *replacement* part of a sed s/// command. Example: {{ password | sed_escape('|') }} """ if value is None: return "" s = str(value) s = s.replace("\\", "\\\\") s = s.replace("&", "\\&") if delimiter: s = s.replace(delimiter, "\\" + delimiter) return s