# Rare Sed Delimiters

## Background

One can replace the usual delimiter / in sed with the other ones. Therefore, the slashes in the URL inside the search pattern won’t have to be escaped by backslashes, which makes the whole command ugly.

## Problem

If the search pattern contains multiple characters like ;, #, |,   (white space), etc, and you’re too lazy to look for other choices of delimiters, what can you do?

## Discussion on the custom delimiter

When I read article at the above link, I was stuck at the last part, which was about using a custom delimiter. I mistakenly thought that this was for the search pattern and the replacement. In fact, reading GNU’s manual and trying some commands repeatedly, I realized that prepending the custom delimiter with a backslash was for specifying the range of the following expresion.

Therefore, I finally understand what somevar is in this Stack Overflow question.

## Solution

### Customizing the delimiter in a replacement

To begin with, I tried the following command.

$echo strange | sed s/'[a-e]'/#/g str#ng#  After that, I know that surrounding the whole s command isn’t a must, just the regex and replacement will do. Then I replaced all / with y in the above command. $ echo strange | sed sy'[a-e]'y#yg
str#ng#


Now, it’s clear that the custom delimiter in the s command doesn’t need to be escaped.

### Towards the goal

The goal in this post is to use bizarre characters as the delimiter in the s command, and I believe that if you’ve reached here, you’ll probably understand what this command is doing, provided that you know the way to input control characters as arguments in bash commands.

## More examples

I’ve just tried to delete a <script> tag in the master branch of a repository for my sample W3CSS page using the in-place editing option of sed. Before making real changes to the file, I tested my command syntax with the standard output first.

[owner@localhost ~/SampleWebPage]$git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/gh-pages remotes/origin/master [owner@localhost ~/SampleWebPage]$ sed -nr '\#<scr#,#</scr#p' ex0.html
sed: -e expression #1, char 9: unexpected ,'


Looking at the manual again, I thought that \%regex% represented one address only. The pattern after the comma was another address, so I should have used two backslashes in the last command.

[owner@localhost ~/SampleWebPage]\$ sed -ir '\#<scr#,\#</scr#' ex0.html
`